2 Stimmen

Subclassing python's dict, Überschreibung von __setitem__ behält den neuen Wert nicht bei

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?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X