在Python中访问多个对象中的字典的问题

时间:2018-11-02 14:34:55

标签: python class dictionary

我是Python新手,在掌握字典在Python中的工作方式时遇到了一些问题。

我创建了一个课程:

class Test:
    dictionary = dict()

    def __init__(self, id):
        self.id = id

    def add(self, key, val):
        self.dictionary[key] = val

    def print(self):
        print("id: " + str(self.id))
        print(self.dictionary.items())

我正在执行以下代码:

list = [Test(0), Test(1)]
list[0].add(0, 0)
list[1].add(1, 1)

for t in list:
    t.print()

此代码的预期效果是:

id: 0
dict_items([(0, 0)])
id: 1
dict_items([(1, 1)])

但是我得到了:

id: 0
dict_items([(0, 0), (1, 1)])
id: 1
dict_items([(0, 0), (1, 1)])

为什么会这样?我应该怎么做才能获得理想的效果?尽管字典属于同一类的两个不同实例,但它似乎共享相同的内存。

2 个答案:

答案 0 :(得分:0)

这是因为dictionary是一个类属性。使其成为实例属性。

看看What is the difference between class and instance attributes?

class Test:
    def __init__(self, id):
        self.id = id
        self.dictionary = dict()

答案 1 :(得分:0)

您正在将字典声明为class的属性,但您希望将其作为instances的属性:

class Test:

    def __init__(self, id):
        self.id = id
        self.dictionary = {}
...