使用类在字典中创建多个实例,它们的属性不是唯一的。我希望他们每个人都有自己独特的属性。你是怎么做到的?
代码:
class a(object):
attr_a = {}
def __init__(self, a={}):
self.attr_a = a
if __name__ == '__main__':
b = a()
c = a()
b.attr_a['abc'] = 'abc'
c.attr_a['abc'] = 'def'
print(b.attr_a)
print(c.attr_a)
结果:
{'abc': 'def'}
{'abc': 'def'}
想要的结果:
{'abc': 'abc'}
{'abc': 'def'}
答案 0 :(得分:2)
这里有两个问题:
1)对于实例级属性,与类级属性相反,不在类级别声明。因此,请删除班级中的attr_a = {}
。
2)默认值a={}
在类/函数声明时计算,而不是实例创建/函数调用时,因此很少使用可变对象作为默认值。这会导致使用默认a
值创建的类的所有实例共享相同的attr_a
dict。您应该使用a=None
作为默认值,然后在__init__
内实例化它,如下所示:
def __init__(self, a=None):
self.attr_a = a or {}