Ich habe eine Klasse Dokument, diese Klasse ist wirklich komplex zu instanziieren, so dass ich ein Builder-Objekt habe, um sie zu erstellen. Beide Elemente gehören nicht mir, also kann ich sie nicht ändernWie erben Sie von einer Klasse, die mit einem Builder instanziiert wurde?
Jetzt möchte ich eine Unterklasse des Dokuments erstellen, nur um einige spezifische Methoden hinzuzufügen. Um die vorgesehenen Builder zu weiterverwenden habe ich versucht, dies:
class SpecialDocument(Document):
def __new__(cls, *args):
return DocumentBuilder(*args)
def __init__(self, *args, **kwargs):
#My initialization
Das Problem hierbei ist, dass die __init__
Methode führt nie die __new__
Verfahren verursachen nicht wieder ein SpecialDocument
(Es gibt einen Document
)
In In meinem speziellen Fall muss ich meine SpecialDocument
nicht anders bauen, als ich eine Document
baue. Gibt es eine Möglichkeit, denselben Builder zu verwenden? Wenn nicht, wie kann ich das erreichen? Ich möchte einfach von Document
erben, um bestimmte Funktionalitäten hinzuzufügen, vielleicht könnte es mit Metaklassen erreicht werden, aber ich habe sie nie benutzt (wahrscheinlich weil ich es nicht vollständig verstehe), ein kleiner Einblick wäre schön, wenn es mir helfen könnte Problem
Brauchen Sie wirklich eine * Unterklasse *? Können Sie nicht einfach Delegierung verwenden, um nur das gewünschte Verhalten hinzuzufügen? – Bakuriu
Was ist die Beziehung zwischen 'Document' und' DocumentBuilder'? –
@PhilipTzou 'DocumentBuilder' ist eine unabhängige Klasse, die ein neues' Document' -Objekt zurückgibt, wenn es ohne Parameter konstruiert ist oder dessen Variablen initialisiert, wenn es einen Parameter empfängt (Der Parameter ist ein Pfad zum tatsächlichen Dokument, falls vorhanden) –