对象之间的Python变量分离

时间:2013-07-14 19:30:46

标签: python object scope variable-assignment

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

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

由于

1 个答案:

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