Python 2.7 - 继承 - 类方法 - 类属性

时间:2017-02-11 17:46:54

标签: python-2.7 inheritance class-method class-attributes

假设我有以下代码:

class Parent(object):
    counter = 0

    @classmethod
    def inc(cls):
        cls.counter += 1

class Child(Parent):
    pass

Child.inc()
print Parent.counter, Child.counter

在我的测试中,此代码输出:     0 1

上面的代码似乎会在子代上创建一个属性计数器并递增它。我尝试过使用super:

class Child(Parent):
    @classmethod
    def inc(cls):
        super(Child,cls).inc()

但结果是一样的。

我如何使inc方法增加Parent,以父和子保持同一计数器并打印的方式:     1 1

提前致谢。

1 个答案:

答案 0 :(得分:2)

类方法绑定到当前类;那是设计的;因此,调用include("include/header.php"); 会将Parent.inc()绑定到clsParent会将Child.inc()绑定到cls。在后一种情况下,表达式

Child

基本上与:

相同
cls.counter += 1

在开始时读取 cls.counter = cls.counter + 1 (因为Parent.counter不存在),但写入Child.counter

如果您只想更新Child.counter,请使用对该类的显式引用:

Parent.counter

并忽略class Parent(object): counter = 0 @classmethod def inc(cls): Parent.counter += 1 属性。