1

假设我有以下代码:

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 方法增加父级,以使父级和子级都使用相同的计数器并打印:1 1

提前致谢。

4

1 回答 1

2

类方法绑定到当前类;这是设计使然;所以调用Parent.inc()绑定clsParent,并Child.inc()绑定clsChild。那么在后一种情况下,表达式

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

并忽略该cls属性。

于 2017-02-11T17:49:36.847 回答