python类静态方法动态绑定静态数据成员

时间:2014-10-10 19:12:44

标签: python static-methods static-members

我真的不知道如何把这个问题描述得足够好。所以我认为一个例子更具表现力:

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

class B(A):
    c=2

我希望B.b()返回2。但事实是它没有。我将以哪种方式实现它?非常感谢。

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