2014-10-10 168 views
0

我真的不知道如何描述这个问题够好。所以,我认为一个例子更有表现:python类静态方法动态绑定静态数据成员

class A: 
    c=1 
    @staticmethod 
    def b(): return A.c 

class B(A): 
    c=2 

我希望B.b()回报2。但事实并非如此。我会以哪种方式实现它?非常感谢。

+1

如果要访问类属性,为什么要使用静态方法而不是类方法? – BrenBarn 2014-10-10 19:16:08

+0

哦耶稣。我的脑中必须有一声枪响! – HuStmpHrrr 2014-10-10 19:20:14

回答

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是类对象上的方法;如果你想使用任何类属性(或类本身,如替代构造函数成语),你想要后者。

2

您必须使用类方法,以便您可以动态地引用类。像你目前使用的静态方法没有绑定到任何类,所以你必须静态显式引用A类。

class A(object): 
    c = 1 
    @classmethod 
    def b(cls): 
     return cls.c 

class B(A): 
    c = 2