Проблема с доступом к словарям в нескольких объектах в Python - PullRequest
0 голосов
/ 02 ноября 2018

Я новичок в 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 голосов
/ 02 ноября 2018

Вы объявляете словарь как атрибут class, но хотите, чтобы он был атрибутом instances:

class Test:

    def __init__(self, id):
        self.id = id
        self.dictionary = {}
...
0 голосов
/ 02 ноября 2018

Это потому, что dictionary является атрибутом класса. Сделайте это атрибутом экземпляра.

Взгляните на В чем разница между атрибутами класса и экземпляра? .

class Test:
    def __init__(self, id):
        self.id = id
        self.dictionary = dict()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...