我有这段 Python 代码。对于 X,结果是
基本上,我有一个类属性,它是一个计数器,并在
TopTest: attr1=0, attr2=1
,这很好理解。但对于 Y,结果是 SubTest: attr1=2, attr2=3
,我不太明白。基本上,我有一个类属性,它是一个计数器,并在
__init__ 方法
中运行。当我启动 Y 时,计数器被设置为 2,只有在属性分配后才开始计数。我不明白为什么它从 2 开始。难道子类不应该复制超类并将计数器重置为 0 吗?class AttrDisplay:
def gatherAttrs(self):
attrs = []
for key in sorted(self.__dict__):
attrs.append('%s=%s' % (key, getattr(self, key)))
return ', '.join(attrs)
def __repr__(self):
return '[%s: %s]' % (self.__class__.__name__, self.gatherAttrs())
class TopTest(AttrDisplay):
count = 0
def __init__(self):
self.attr1 = TopTest.count
self.attr2 = TopTest.count+1
TopTest.count += 2
class SubTest(TopTest):
pass
X, Y = TopTest(), SubTest()
print(X)
print(Y)
self.count += 2
会创建实例变量,而不影响类变量。 - then0rThcount = [0]
,但应该使用type(self)
。一个元素的列表只是一个已经有解决方案的问题的丑陋解决方法。 - then0rTh