-1

我不明白下面显示的代码的输出。我希望看到:

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()

谢谢

4

1 回答 1

2

当您创建 dictionary__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 将字典实例化为实例对象,因此每次实例化类时都会重置它。

于 2013-07-14T19:35:59.173 回答