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线程锁(thread)学习示例
Dec 04 Python
Python3连接MySQL(pymysql)模拟转账实现代码
May 24 Python
Python3.6正式版新特性预览
Dec 15 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
May 04 Python
Python实现的简单排列组合算法示例
Jul 04 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
Sep 14 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
Nov 18 Python
python多线程并发实例及其优化
Jun 27 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
Mar 23 Python
python requests.get带header
May 05 Python
Python列表元素删除和remove()方法详解
Jan 04 Python
Python音乐爬虫完美绕过反爬
Aug 30 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
9个PHP开发常用功能函数小结
2011/07/15 PHP
PHP中file_exists函数不支持中文名的解决方法
2014/07/26 PHP
php远程下载类分享
2016/04/13 PHP
[原创]js获取数组任意个不重复的随机数组元素
2010/03/15 Javascript
js中格式化日期时间型数据函数代码
2010/11/08 Javascript
jquery鼠标滑过提示title具体实现代码
2013/08/06 Javascript
IE8中使用javascript动态加载CSS的解决方法
2014/06/17 Javascript
js中style.display=&quot;&quot;无效的解决方法
2014/10/30 Javascript
JS实现向表格中动态添加行的方法
2015/03/30 Javascript
JQuery限制复选框checkbox可选中个数的方法
2015/04/20 Javascript
Select下拉框模糊查询功能实现代码
2016/07/22 Javascript
js以分隔符分隔数组中的元素并转换为字符串的方法
2016/11/16 Javascript
AngularJS 中的数据源的循环输出
2017/10/12 Javascript
Vue-input框checkbox强制刷新问题
2019/04/18 Javascript
微信小程序获取公众号文章列表及显示文章的示例代码
2020/03/10 Javascript
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
Python安装官方whl包和tar.gz包的方法(推荐)
2017/06/04 Python
Python排序搜索基本算法之冒泡排序实例分析
2017/12/09 Python
Python实现购物车程序
2018/04/16 Python
根据DataFrame某一列的值来选择具体的某一行方法
2018/07/03 Python
解决Python3 抓取微信账单信息问题
2019/07/19 Python
python处理大日志文件
2019/07/23 Python
python+Django+pycharm+mysql 搭建首个web项目详解
2019/11/29 Python
Python获取对象属性的几种方式小结
2020/03/12 Python
python 数据分析实现长宽格式的转换
2020/05/18 Python
无惧面试,带你搞懂python 装饰器
2020/08/17 Python
pycharm远程连接服务器并配置python interpreter的方法
2020/12/23 Python
python基于opencv实现人脸识别
2021/01/04 Python
《一个中国孩子的呼声》教学反思
2014/02/12 职场文书
销售个人求职信范文
2014/04/28 职场文书
财务部绩效考核方案
2014/05/04 职场文书
社区活动总结报告
2014/05/05 职场文书
房产公证委托书范本
2014/09/20 职场文书
夫妻分居协议书范文
2014/11/26 职场文书
人事任命通知书
2015/04/21 职场文书
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
2021/05/06 MySQL