爲了更好地說明差異self.__class__.attribute
和ClassName.attribute
之間:
class Feature(object):
counter = 0
def __init__(self):
self.id = self.__class__.counter
self.__class__.counter += 1
class Sub(Feature):
def __init__(self):
super(Sub, self).__init__()
print [(vars(Feature()), vars(Sub())) for i in xrange(3)]
print Feature.counter, Sub.counter, id(Feature.counter) == id(Sub.counter)
class Feature(object):
counter = 0
def __init__(self):
self.id = Feature.counter
Feature.counter += 1
class Sub(Feature):
def __init__(self):
super(Sub, self).__init__()
print [(vars(Feature()), vars(Sub())) for i in xrange(3)]
print Feature.counter, Sub.counter, id(Feature.counter) == id(Sub.counter)
>>> [({'id': 0}, {'id': 1}), ({'id': 1}, {'id': 2}), ({'id': 2}, {'id': 3})]
3 4 False
>>> [({'id': 0}, {'id': 1}), ({'id': 2}, {'id': 3}), ({'id': 4}, {'id': 5})]
6 6 True
您不是'counter'變量的一個實例屬性,您可以在'Feature'類的對象上訪問嗎? (我的意思是第二行中的那個,直接在類簽名之後) – 2013-03-18 21:59:43
我看不到你解釋的行爲,你能顯示一個帶有錯誤輸出的可運行代碼段嗎? – 2013-03-18 22:00:08
這段代碼在我嘗試時工作正常。 – Ben 2013-03-18 22:00:24