比较@classmethod与 @staticmethod
共同点:
区别:
cls
,而staticmethod不需要
。因此可以访问、修改类的属性,类的方法,实例化对象等,避免硬编码;而staticmethod不行,实例成员
class A:
def __init__(self, 参数):
self.实例变量 = 参数
def 实例方法名称(self):
print(self.实例变量)
a01 = A(10)
print(a01.实例变量)
a01.实例方法名称() # 自动传递对象地址
@classmethod
类成员
class B:
#无论创建多少对象,类变量只有一份,被所有对象所共享。
类变量 = 10
#类方法:操作类变量
@classmethod
def 类方法名称(cls):
print(cls.实例变量)
print(B.类变量)
B.类方法名称() #自动传递类名
@staticmethod
class C:
# 3.静态方法
@staticmethod
def fun01():
print("方法执行啦")
C.fun01()
具体实例:
1.语法
(1)定义:
@classmethod
def 方法名称(cls,参数列表):
方法体
(2)调用:类名.方法名(参数列表)
2.说明
– 至少有一个形参,第一个形参用于绑定类,一般命名为’cls’
– 使用@classmethod修饰的目的是调用类方法时可以隐式传递类。
– 类方法中不能访问实例成员,实例方法中可以访问类成员。
3.作用:操作类变量。
class ICBC:
#类变量
moneys = 9999
#类方法 #相当于大家共享的“饮水机”
@classmethod #类方法使用classmethod修饰器修饰
def print_total_moneys