有没有办法为python中的每个实例创建唯一的字典属性

时间:2013-02-18 03:37:14

标签: python class dictionary

使用类在字典中创建多个实例,它们的属性不是唯一的。我希望他们每个人都有自己独特的属性。你是怎么做到的?

代码:

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'}

1 个答案:

答案 0 :(得分:2)

这里有两个问题:

1)对于实例级属性,与类级属性相反,不在类级别声明。因此,请删除班级中的attr_a = {}

2)默认值a={}在类/函数声明时计算,而不是实例创建/函数调用时,因此很少使用可变对象作为默认值。这会导致使用默认a值创建的类的所有实例共享相同的attr_a dict。您应该使用a=None作为默认值,然后在__init__内实例化它,如下所示:

def __init__(self, a=None):
        self.attr_a = a or {}