我不明白下面显示的代码输出。我希望看到:
1
1
但请看:
1
2
这是使用Python 2.7.3的代码:
#!/usr/bin/python
class Test:
__tBin = {'80':0, '70':0, '60':0, '50':0,'40':0,
'30':0, '20':0, '10':0, '0':0,
'-10':0, '-20':0, '-30':0, '-40':0}
def __init__(self):
self.__tests = {'i2c_transfer':self.__tBin}
def foo(self):
self.__tests['i2c_transfer']['80'] += 1
print self.__tests['i2c_transfer']['80']
if __name__ == "__main__":
testList = list()
for i in range(1, 3):
testList.append(Test())
for i in testList:
i.foo()
由于
答案 0 :(得分:2)
创建字典__tBin
时,实际上是将其创建为 Class 对象,而不是实例对象。因此,当您执行self.__tests['i2c_transfer']['80'] += 1
时,该新值将持续存在于每个类的实例中。所以,如果你要改为:
class Test:
def __init__(self):
self.__tBin = {'80':0, '70':0, '60':0, '50':0,'40':0,
'30':0, '20':0, '10':0, '0':0,
'-10':0, '-20':0, '-30':0, '-40':0}
self.__tests = {'i2c_transfer':self.__tBin}
你应该得到你想要的东西。 self .__ tBin将字典实例化为实例对象,因此每次实例化类时都会重置它。