Ich verwende Eigenschaften, um bei jeder Änderung eines Attributs einen Code auszuführen:
%Vor%Und das funktioniert großartig:
%Vor% Wenn ich stattdessen ein veränderbares Objekt in attr
speichere, kann attr
direkt geändert werden, indem der Setter und mein Change-Detection-Code umgangen werden:
Nehmen wir an, dass attr
immer nur zum Speichern eines Objekts vom Typ Container
verwendet wird. Gibt es eine elegante Möglichkeit, SomeClass
und / oder Container
so zu ändern, dass SomeClass
execute _on_change
immer dann gemacht wird, wenn das in Container
gespeicherte attr
-Objekt geändert wird? Mit anderen Worten, ich möchte, dass meine Ausgabe lautet:
Hier ist eine Version von SomeClass
und Container
, von der ich denke, dass sie das gesuchte Verhalten hat. Die Idee dabei ist, dass Änderungen an Container
die _on_change()
-Funktion der SomeClass
-Instanz aufrufen, die damit verknüpft ist:
Beispiel:
%Vor% Beachten Sie, dass die einzige Änderung an SomeClass
die zweite Zeile in __init__()
war. Ich habe den vollständigen Code einfach der Vollständigkeit und dem einfachen Testen hinzugefügt.
Wenn Sie Änderungen verfolgen und nicht mit dem Jonglieren mit on_change()
-Methoden in verschiedenen Klassen kämpfen möchten, können Sie functools.partial
wie gezeigt verwenden, beginnend mit hier .
Auf diese Weise können Sie Ihre Daten einbetten und vollständig ausblenden. Get / change wird nur über einige Methoden möglich sein, die in diesem Objekt enthalten sind.
NB : Python hat keine privaten Eigenschaften und auf der Konvention, dass wir alle Erwachsene sind und gegen Regeln handeln. In Ihrem Fall sollten Benutzer Ihrer API die Daten des Containers (nach der Erstellung) nicht direkt ändern.
NB : Hier für diejenigen, die sich für andere Wege interessieren könnten ...
Tags und Links python