Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析


Posted in Python onApril 12, 2019

本文实例讲述了Python面向对象程序设计类变量与成员变量、类方法与成员方法用法。分享给大家供大家参考,具体如下:

类变量与成员变量

在类中声明的变量我们称之为类变量[静态成员变量],

init()函数中声明的变量并且绑定在实例上的变量我们称之为成员变量。

类变量直接可以通过类名来调用。

1、若类变量与成员同时存在并且同名

使用对象来调用的时候,获取的结果是成员变量的值,

使用类名来调用,获取的是类变量的值。

2、若类变量存在,成员变量不存在,

使用对象来调用的时候,它首先寻找成员变量,

如果成员变量不存在。则去寻找类变量。

3、若类变量不存在,成员变量存在:

使用类名来调用,则会报错

总结:

类变量通过类名或者对象来调用都不会报错,但是成员变量只能通过对象来调用。

通过对象来修改类属性的时候,只能作用到对象自己本身,作用不到类,

若是通过类名来修改类属性,则只对类变量的值进行修改。

class Person(object):
  # 类变量
  name = "haha"
  age = "19"
  height = 170
  def __init__(self,name,age,weight):
    # 成员变量
    self.name = name
    self.age = age
    self.weight = weight
  def sayHeight(self):
    print(self.height)
per = Person("xiaoming",19,50)
print(per.name)
print(Person.name)
# print(Person.weight)
per.height = 190
print(per.height)
print(Person.height)
print('*********')
Person.height = 200
print(Person.height)
print(per.height)
per.sayHeight()

输出:

xiaoming
haha
190
170
*********
200
190
190

类方法与成员方法

类方法,成员方法

类方法:使用类名来调用的方法

成员方法:使用对象来调用的方法

若一个方法定义在类中,但是没有参数[一般默认self],此时我们只能通过类名来调用

若我们需要使用到一个类的对象,首先要实例化。

class Person(object):
  def __init__(self,name,age):
    self.name = name
    self.age = age
  def say(self):
    print("I am %s, I am %d year old"%(self.name,self.age))
  def sayHello():
    print('hello I am class function')
per = Person("xiaoming",19)
per.say()
Person.sayHello()

输出:

I am xiaoming, I am 19 year old
hello I am class function

类方法与静态方法

静态方法

当调用此方法时,不会将类的实例传递给它。

在类中定义的函数。

无需实例化类,就可以调用。它的定义在继承中,是不可变的。

类方法:

当调用此方法时,将函数所属的类作为第一个参数传递。

class A(object):
    def foo(self, x):
      print("executing foo(%s, %s)" % (self, x))
    @classmethod
    def class_foo(cls, x):
      print("executing class_foo(%s, %s)" % (cls, x))
    @staticmethod
    def static_foo(x):
      print("executing static_foo(%s)" % x)
  a = A()
  # 调用foo函数,参数传入1
  a.foo(1)
  # 调用class_foo,参数传入1
  A.class_foo(1)
  # 调用static_foo,参数传入1
  A.static_foo(1)
  a.static_foo(1):

输出:

executing foo(<__main__.A object at 0x0000024F126489B0>, 1)
executing class_foo(<class '__main__.A'>, 1)
executing static_foo(1)
executing static_foo(1)

下划线

下划线定义特殊的方法,一般情况下是系统定义名字,
如:

__init()____del()__

前双下划线(age):表示私有类型的变量(privated),只能在本类中进行访问,外界不能直接访问。如__age.

单下划线(_age):以单下划线开头的表示保护类型变量(protected),

保护类型的变量只允许本身以及子类访问,不能用于from module import *

[使用单下划线开头的时候,虽然变量能够直接被访问,但是请把变量视为一个保护类型的变量,尽量不要去访问。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python 正则表达式的高级用法
Dec 04 Python
Python开发的实用计算器完整实例
May 10 Python
Python反射的用法实例分析
Feb 11 Python
Python多线程处理实例详解【单进程/多进程】
Jan 30 Python
python+mysql实现个人论文管理系统
Oct 25 Python
浅谈python中统计计数的几种方法和Counter详解
Nov 07 Python
Django Haystack 全文检索与关键词高亮的实现
Feb 17 Python
在django中form的label和verbose name的区别说明
May 20 Python
使用sklearn对多分类的每个类别进行指标评价操作
Jun 11 Python
使用python把xmind转换成excel测试用例的实现代码
Oct 12 Python
python中用ggplot绘制画图实例讲解
Jan 26 Python
python SOCKET编程基础入门
Feb 27 Python
Python、 Pycharm、Django安装详细教程(图文)
Apr 12 #Python
Python面向对象程序设计构造函数和析构函数用法分析
Apr 12 #Python
Python面向对象思想与应用入门教程【类与对象】
Apr 12 #Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
Apr 12 #Python
Python实现的银行系统模拟程序完整案例
Apr 12 #Python
详解python--模拟轮盘抽奖游戏
Apr 12 #Python
Python实现的排列组合、破解密码算法示例
Apr 12 #Python
You might like
php漏洞之跨网站请求伪造与防止伪造方法
2013/08/15 PHP
php操作MongoDB基础教程(连接、新增、修改、删除、查询)
2014/03/25 PHP
php实现购物车产品删除功能(2)
2020/07/23 PHP
filemanage功能中用到的common.js
2007/04/08 Javascript
原始XMLHttpRequest方法详情回顾
2013/11/28 Javascript
轻松学习jQuery插件EasyUI EasyUI创建RSS Feed阅读器
2015/11/30 Javascript
JavaScript Math.round() 方法
2015/12/18 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
实例详解ztree在vue项目中使用并且带有搜索功能
2018/08/24 Javascript
javascript数据类型中的一些小知识点(推荐)
2019/04/18 Javascript
EasyUI 数据表格datagrid列自适应内容宽度的实现
2019/07/18 Javascript
Vue的状态管理vuex使用方法详解
2020/02/05 Javascript
javascript实现前端input密码输入强度验证
2020/06/24 Javascript
vue等两个接口都返回结果再执行下一步的实例
2020/09/08 Javascript
python下paramiko模块实现ssh连接登录Linux服务器
2015/06/03 Python
Python实现常见的回文字符串算法
2018/11/14 Python
python实现停车管理系统
2018/11/30 Python
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
python画图把时间作为横坐标的方法
2019/07/07 Python
解决Django加载静态资源失败的问题
2019/07/28 Python
Django Docker容器化部署之Django-Docker本地部署
2019/10/09 Python
如何验证python安装成功
2020/07/06 Python
Django CBV模型源码运行流程详解
2020/08/17 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
2020/09/26 Python
FragranceNet中文网:北美健康美容线上零售商
2020/08/26 全球购物
后勤岗位职责
2013/11/26 职场文书
2014年中秋节活动总结
2014/08/29 职场文书
教师自我剖析材料(群众路线)
2014/09/29 职场文书
2014年化验室工作总结
2014/11/21 职场文书
2014年内勤工作总结
2014/11/24 职场文书
2015年党员自评材料
2014/12/17 职场文书
项目技术负责人岗位职责
2015/04/13 职场文书
2015年清剿火患专项行动工作总结
2015/07/27 职场文书
经典爱情感言
2015/08/03 职场文书
500字作文之关于爸爸
2019/11/14 职场文书
原生JS封装vue Tab切换效果
2021/04/28 Vue.js