Ich finde oft, dass ich Klasseninstanzen habe, die von anderen Klasseninstanzen in einer Baumstruktur abstammen. Zum Beispiel, ich mache eine CMS-Plattform in Python. Ich könnte ein Reich haben und darunter einen Blog und darunter eine Post. Jeder Konstruktor verwendet seinen übergeordneten Parameter als ersten Parameter, damit er weiß, wozu er gehört. Es könnte so aussehen:
%Vor%Normalerweise füge ich der übergeordneten Klasse eine create-Methode hinzu, sodass die Verknüpfung etwas automatischer ist. Meine Realm-Klasse könnte so aussehen:
%Vor%Damit kann der Benutzer der API nicht jedes einzelne Modul importieren, nur das oberste. Es könnte sein wie:
%Vor%Das Problem ist, diese create-Methoden sind redundant und ich muss die gleichen Parameter an zwei Stellen pydoc.
Ich frage mich, ob es ein Muster gibt (vielleicht mit Metaklassen), um eine Klasseninstanz mit einer Elternklasseninstanz zu verknüpfen. Irgendwie könnte ich Code wie diesen aufrufen und dem Blog mitteilen, worum es sich bei dem übergeordneten Bereich handelt:
%Vor% Sie könnten eine gemeinsame Basisklasse für die Container verwenden, die eine add()
-Methode enthalten
und den Parameter parent
in den abgeleiteten Klassen optional machen
Ihr Code oben würde jetzt
lesen %Vor% Sie würden keine create...()
-Methoden mehr haben, also brauchen Sie nichts zweimal zu dokumentieren.
Wenn das Festlegen des übergeordneten Elements mehr als nur das Ändern des Attributs parent
erfordert, können Sie eine Eigenschaft oder eine Setter-Methode verwenden.
BEARBEITEN : Wie Sie in den Kommentaren unten gesagt haben, sollten die Kinder am Ende des Konstruktors an die Eltern gebunden sein. Der obige Ansatz kann modifiziert werden, um dies zu unterstützen:
%Vor%Tags und Links python