假设我有以下代码:
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
提前致谢。
答案 0 :(得分:2)
类方法绑定到当前类;那是设计的;因此,调用include("include/header.php");
会将Parent.inc()
绑定到cls
,Parent
会将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
属性。