通过不同的可变属性

时间:2018-02-18 18:50:44

标签: python-2.7

我想生成一个类的多个对象,其中只有该类的属性不同。让我举个例子

class A:
    ...:     def __init__(self, x):
    ...:         self.x = x
    ...:     def update_dic(self, dictionary):
    ...:         self.x.update(dictionary)
    ...: 

In [55]: list_class = list()

In [56]: shared_dict = {'a': 1}

现在我想生成10个不同的对象,他们共享shared_dict但是以不同的方式更新它:

In [58]: for i in range(0, 10):
    ...:     obj = A(shared_dict)
    ...:     obj.update_dic({'b': i})
    ...:     list_class.append(obj)
    ...: 

正如我们在下面的输出中看到的那样,它们是不同的对象:

In [59]: list_class
Out[59]: 
[<__main__.A instance at 0xac0c7d6c>,
 <__main__.A instance at 0xac13914c>,
 <__main__.A instance at 0xac0c7d8c>,
 <__main__.A instance at 0xac0c7dac>,
 <__main__.A instance at 0xac0c7dcc>,
 <__main__.A instance at 0xac0c7e0c>,
 <__main__.A instance at 0xac0c7e2c>,
 <__main__.A instance at 0xac0c7e4c>,
 <__main__.A instance at 0xac0c7e6c>,
 <__main__.A instance at 0xac0c7e8c>]

但是,它们会获得所有相同的元素b

In [60]: [_.x for _ in list_class]
Out[60]: 
[{'a': 1, 'b': 9},
 {'a': 1, 'b': 9},
 {'a': 1, 'b': 9},
 {'a': 1, 'b': 9},
 {'a': 1, 'b': 9},
 {'a': 1, 'b': 9},
 {'a': 1, 'b': 9},
 {'a': 1, 'b': 9},
 {'a': 1, 'b': 9},
 {'a': 1, 'b': 9}]

我想这与列表是一个可变对象有关。但是到底发生了什么,更重要的是如何解决它,即得到这样的输出:

In [60]: [_.x for _ in list_class]
Out[60]: 
[{'a': 1, 'b': 0},
 {'a': 1, 'b': 1},
 {'a': 1, 'b': 2},
 {'a': 1, 'b': 3},
 {'a': 1, 'b': 4},
 {'a': 1, 'b': 5},
 {'a': 1, 'b': 6},
 {'a': 1, 'b': 7},
 {'a': 1, 'b': 8},
 {'a': 1, 'b': 9}]

0 个答案:

没有答案