1.类方法
类方法是从属于"类对象"的方法。类对象可以通过装饰器@classmethod来定义,具体格式如下:
@classmethod def 类方法名(cls [, 形参列表]): 方法体
要点如下:
- @classmethod必须位于方法的上面一行
- 第一个参数cls(class的缩写,和前面笔记介绍的self类似),必须要有,代指"类对象"本身。
- 调用类方法格式:类名.类方法名(参数列表)。参数列表中不需要也不能给cls参数进行传值,解释器会自动赋值。
- 类方法中可以访问实例属性和实例方法会导致错误,因为有类不一定有对象。
- 子类继承父类方法时,传入cls是自身对象,而非父类对象。(后面的笔记会有介绍)
代码示例:
class Student: count = 0 # 类属性 """定义方法""" @classmethod def print_count(cls): """cls参数代表类对象""" print(Student.count) """调用类方法""" print("调用时,不传递cls参数") Student.print_count()
运行结果:
调用时,不传递cls参数
0
2.静态方法
在python中,允许定义于”类对象“无关的方法,称为"静态方法"。
"静态方法"和在模块中定义的普通方法没有什么区别,只不过"静态方法"放到了"类的名字变量空间",需要通过类调用。
静态方法通过装饰器@staticmethod来定义,格式如下:
@staticmethod def 静态方法名([形参列表]): 方法体
要点如下:
- @staticmethod必须位于方法上面一行
- 调用静态方法格式:类名.静态方法名(参数列表)
- 静态方法中访问实例属性和实例方法会导致错误
代码示例:
class Student: count = 0 # 类属性 @staticmethod def add(a, b): """与类无关的静态方法""" """因为静态方法从属于类,所以是可以操作类属性和类方法""" print("{0}+{1}={2}".format(a, b, a+b)) return a + b # 调用静态方法 Student.add(20, 30)
运行结果:
20+30=50
res=50
3.实例方法/类方法/静态方法的区别
class MyClass: # 类属性 class_attr = 0 def __init__(self, obj_attr): self.obj_attr = obj_attr def instance_method(self): return "instance method called", self @classmethod def class_method(cls): return "class method called", cls @staticmethod def static_method(): return "static method called" print("调用实例方法") obj1 = MyClass("obj_attr1") print(obj1.instance_method()) print("--" * 20) print("调用类方法") print(MyClass.class_method()) print("--" * 20) print("调用静态方法") print(MyClass.static_method())
运行结果:
调用实例方法
('instance method called', <__main__.MyClass object at 0x10ca93310>)
----------------------------------------
调用类方法
('class method called', <class '__main__.MyClass'>)
----------------------------------------
调用静态方法
static method called
注意: 以下讨论的属性、方法均指公开的类型,非私有的。
实例方法:
- 能读取、修改实例属性
- 能调用实例方法
- 能读取、修改类属性
- 能调用类方法
- 能调用类静态方法
- 调用方式:对象名.实例方法名(参数列表),编译器自动传递self参数
类方法:
- 不能读取、修改实例属性
- 不能用实例方法
- 能读取、修改类属性
- 能调用类方法
- 能调用类静态方法
- 调用方式:类名.类方法名(参数列表),编译器自动传递cls参数
静态方法:
- 不能读取、修改实例属性
- 不能用实例方法
- 能读取、修改类属性
- 能调用类方法
- 能调用类静态方法
- 调用方式: 类名.静态方法名(参数列表),不需要cls参数
- 类方法和静态方法,功能非常相近,可以相互替代, 但是从规范的角度来说,请按照实例方法操作对象,类方法操作类,静态方法为和类无关的通用方法。
以上就是浅谈python 类方法/静态方法的详细内容,更多关于类方法/静态方法的资料请关注其它相关文章!
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
更新日志
2024年11月20日
2024年11月20日
- 陈果《有了你》UPM24K金碟[日本限量版][WAV+CUE]
- 群星《新说唱2024 第12期 (下)》[FLAC/分轨][506.43MB]
- 李常超 (Lao乾妈)《天生江湖》[320K/MP3][168.84MB]
- 李常超 (Lao乾妈)《天生江湖》[FLAC/分轨][633.83MB]
- 群星《雨果发烧碟二十》UPMAGCD2024[WAV+CUE]
- 刘德丽《赤的疑惑》限量1:1黄金母盘直刻[低速原抓WAV+CUE]
- 柏菲·珞叔作品集《金色大厅2》限量开盘母带ORMCD[低速原抓WAV+CUE]
- Gareth.T《sad songs(Explicit)》[320K/MP3][29.03MB]
- Gareth.T《sad songs(Explicit)》[FLAC/分轨][152.85MB]
- 证声音乐图书馆《海风摇曳·盛夏爵士曲》[320K/MP3][63.06MB]
- 龚玥《金装龚玥HQCD》头版限量[WAV分轨]
- 李小春《吻别》萨克斯演奏经典[原抓WAV+CUE]
- 齐秦《辉煌30年24K珍藏版》2CD[WAV+CUE]
- 证声音乐图书馆《海风摇曳·盛夏爵士曲》[FLAC/分轨][321.47MB]
- 群星 《世界经典汽车音乐》 [WAV分轨][1G]