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 类方法/静态方法的详细内容,更多关于类方法/静态方法的资料请关注其它相关文章!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]