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
。