Я подклассифицировал dict, но столкнулся с проблемой с setitem, где одно задание работает, но другого назначения нет. Я варил вниз к следующей основной задачи:Подкласс python's 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'}".
Test 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.
Я посмотрел в Интернете, но не может сказать, является ли конструктор подкласса копирует словарь, поэтому операции выполняются на другом экземпляре словаря. Любой совет?
Спасибо, Нед. Это глубокая копия и любые предложения о том, где искать код python, чтобы найти __init__ для dict? –
Это не глубокая копия. Код для dict довольно активно, 2500 строк C. Если вы хотите его прочитать, он находится в Objcets/dictobject.c в исходном дистрибутиве Python. –
Хорошо, спасибо за информацию –