根据我的理解,类方法中传递的第一个参数是定义类方法的类本身。例如,考虑以下代码:class A(object):
__x=10
@classmethod
def clam(cls,*args):
print(cls.__x)
class B(A):
__x=50
当我打电话给你时:
^{pr2}$
输出是10,据我的理解是可以的,因为被调用的类方法是在类A中定义的,所以类A将隐式传递给clam(),并且x的值是10。在
但当我运行以下代码时:class A(object):
x=10
@classmethod
def clam(cls,*args):
print(cls.x)
class B(A):
x=50
当我打电话给你时:B.clam()
我的生活突然毁了。输出50。在
这两种情况的唯一区别是,在前一种情况下,x是私有的。
到底发生了什么事?为什么后一个的输出是50?是否有任何范围变化,或者传递给A中定义的类方法的第一个参数突然变成了B类中的?在