Подкласс Python диктует, переопределение __setitem__ не сохраняет новое значение - PullRequest
2 голосов
/ 31 октября 2009

Я делюсь на подклассы dict, но столкнулся с проблемой setitem , когда одно назначение работает, а другое - нет. Я свел это к следующей основной проблеме:

class CustomDict(dict):
 def __setitem__(self, key, value):
  super(CustomDict, self).__setitem__(key, value)

Тест 1 не пройден:

data = {"message":"foo"}
CustomDict(data)["message"] = "bar"
print CustomDict(data) # Expected "{'message': 'bar'}". Actual is "{'message': 'foo'}".
print data # Expected "{'message': 'bar'}". Actual is "{'message': 'foo'}".

Тест 2 успешно пройден:

data = CustomDict({"message":"foo"})
data["message"] = "bar"
print CustomDict(data) # Expected "{'message': 'bar'}". Actual matches expected.
print data # Expected "{'message': 'bar'}". Actual matches expected.

Я посмотрел в Интернете, но не смог определить, копирует ли конструктор подкласса словарь, чтобы операции выполнялись с другим экземпляром словаря. Любой совет?

1 Ответ

10 голосов
/ 31 октября 2009

Вы создаете новые экземпляры CustomDict в каждой строке. CustomDict(data) создает новый экземпляр, который копирует data.

Попробуйте это:

cd = CustomData({"message":"foo"})
cd["message"] = "bar"
print cd # prints "{'message': 'bar'}".
...