我真的不知道如何描述这个问题够好。所以,我认为一个例子更有表现:python类静态方法动态绑定静态数据成员
class A:
c=1
@staticmethod
def b(): return A.c
class B(A):
c=2
我希望B.b()
回报2
。但事实并非如此。我会以哪种方式实现它?非常感谢。
我真的不知道如何描述这个问题够好。所以,我认为一个例子更有表现:python类静态方法动态绑定静态数据成员
class A:
c=1
@staticmethod
def b(): return A.c
class B(A):
c=2
我希望B.b()
回报2
。但事实并非如此。我会以哪种方式实现它?非常感谢。
的问题是,您使用的是staticmethod
和硬编码类A
,而不是使用classmethod
,并使用cls
说法。
试试这个:
class A:
c=1
@classmethod
def b(cls): return cls.c
的文档(上面链接)解释的区别,但你可能想尝试寻找堆栈溢出的问题,如What is the difference between @staticmethod
and @classmethod
in Python进行了较深入的讨论。简而言之:staticmethod
基本上只是类名称空间内的全局函数,而classmethod
是类对象上的方法;如果你想使用任何类属性(或类本身,如替代构造函数成语),你想要后者。
您必须使用类方法,以便您可以动态地引用类。像你目前使用的静态方法没有绑定到任何类,所以你必须静态显式引用A
类。
class A(object):
c = 1
@classmethod
def b(cls):
return cls.c
class B(A):
c = 2
如果要访问类属性,为什么要使用静态方法而不是类方法? – BrenBarn 2014-10-10 19:16:08
哦耶稣。我的脑中必须有一声枪响! – HuStmpHrrr 2014-10-10 19:20:14