我真的不知道如何把这个问题描述得足够好。所以我认为一个例子更具表现力:
class A:
c=1
@staticmethod
def b(): return A.c
class B(A):
c=2
我希望B.b()
返回2
。但事实是它没有。我将以哪种方式实现它?非常感谢。
答案 0 :(得分:2)
您必须使用类方法,因此您可以动态引用该类。您当前使用的静态方法未绑定到任何类,因此您必须静态显式引用A
类。
class A(object):
c = 1
@classmethod
def b(cls):
return cls.c
class B(A):
c = 2
答案 1 :(得分:2)
问题是您正在使用staticmethod
并对类A
进行硬编码,而不是使用classmethod
,并使用cls
参数。
试试这个:
class A:
c=1
@classmethod
def b(cls): return cls.c
文档(上面链接)解释了这些差异,但您可能想尝试查看像#{3}}这样的Stack Overflow问题,以进行更深入的讨论。简而言之:staticmethod
基本上只是类命名空间中的全局函数,而classmethod
是类对象上的方法;如果你想使用任何类属性(或类本身,如在备用构造函数中),你需要后者。