关于类方法的调用问题
本帖最后由 lydygly 于 2020-10-15 17:34 编辑class A:
COUNT = 0
def normal(self):
print('__normal__')
@staticmethod
def smethod():
print('smethod')
@classmethod
def cmethod(cls):
cls.COUNT += 1
print(cls.COUNT)
a = A()
b = A()
A.smethod()
a.smethod()
A.normal(A())
A.normal(1)
a.cmethod()
a.cmethod()
执行结果:
smethod
smethod
__normal__
__normal__
1
2
我的疑问:
当用类名直接调用方法时,需要显式传入一个对象作为第一个参数(A.normal(A())) , 但为什么在实例调用类方法时却不需要显式传入一个类给cls呢 ?即,为什么是a.cmethod() 而不是a.cmethod(A) ?
这和self不是一样的吗
要么A.normal(a) 要么 a.normal()
实例不需要显示的传self kogawananari 发表于 2020-10-15 20:54
这和self不是一样的吗
要么A.normal(a) 要么 a.normal()
实例不需要显示的传self
不是a.normal,是 a.cmethod ,cmethod是一个类方法, 不是普通的方法。 lydygly 发表于 2020-10-15 21:37
不是a.normal,是 a.cmethod ,cmethod是一个类方法, 不是普通的方法。
{:10_331:}cls和self不是一样的吗不这样理解你应该看@classmethod装饰器的源码{:10_331:}
页:
[1]