Ich bin Unterklasse dict, aber lief in ein Problem mit setitem wo eine Aufgabe funktioniert, eine andere aber nicht. Ich habe das Problem auf das folgende Grundproblem heruntergebrochen:
class CustomDict(dict):
def __setitem__(self, key, value):
super(CustomDict, self).__setitem__(key, value)
Test 1 schlägt fehl:
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 ist erfolgreich:
data = CustomDict({"message":"foo"})
data["message"] = "bar"
print CustomDict(data) # Expected "{'message': 'bar'}". Actual matches expected.
print data # Expected "{'message': 'bar'}". Actual matches expected.
Ich habe im Internet nachgeschaut, konnte aber nicht feststellen, ob der Unterklassenkonstruktor das Wörterbuch kopiert, so dass Operationen an einer anderen Instanz des Wörterbuchs ausgeführt werden. Irgendein Rat?