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

Python 2.7 Python 2.7-继承-类方法-类属性,python-2.7,inheritance,class-method,class-attributes,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 在我的测试中,此代码输出: 01 上面的代码似乎将在子级上创建一个属性计数器并将其递增。我尝试过在以下情况下使用supe

假设我有以下代码:

class Parent(object):
    counter = 0

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

class Child(Parent):
    pass

Child.inc()
print Parent.counter, Child.counter
在我的测试中,此代码输出: 01

上面的代码似乎将在子级上创建一个属性计数器并将其递增。我尝试过在以下情况下使用super:

class Child(Parent):
    @classmethod
    def inc(cls):
        super(Child,cls).inc()
但结果是一样的

如何使inc方法增加父级,使父级和子级都保持在同一计数器上并打印: 11

提前感谢。

类方法绑定到当前类;这是故意的;因此,调用
Parent.inc()
会将
cls
绑定到
Parent
,而
Child.inc()
会将
cls
绑定到
Child
。在后一种情况下,表达式

cls.counter += 1
基本上与以下内容相同:

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

如果只希望更新
父级计数器
,请使用对类的显式引用:

class Parent(object):
    counter = 0

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

并忽略
cls
属性。

如果要增加
Parent.counter
,请参阅
Parent.counter
,而不是
cls.counter