Override Class.__init__ in Subclass
Verfasst: Sonntag 1. Juli 2007, 10:05
Habe eine Baseclass, die im Konstruktor zwei Argumente erwartet. Das zweite Argument ist optional. Beispiel:
Dann gibt's eine Subclass, die eigentlich genau wie die Baseclass aufgebaut ist, bei der aber das zweite Argument im Konstruktor immer `None` sein muss. Daher möchte ich verhindern, dass man beim Initialisieren des Objekts ein zweites Argument angeben kann.
Ich möchte aber nicht den ganzen Konstruktor neu schreiben, sondern den der Basesclass aufrufen, nur eben mit einem Argument. Ich dachte an sowas hier, aber das ruft den Konstruktor unendlich oft auf:
Wie realisiert man das am besten?
P.S. Nun könnte man ja im Anschluss `eggs` trotzdem noch überschreiben. Kann ich das verhindern, indem ich sowas wie eine "protected" Variable benutze, die von der Subclass nicht überschreibbar ist`, also z.B. `__eggs` (ich weiß, überschreiben ginge dann noch durch `B._B__eggs`)?
Code: Alles auswählen
class A:
def __init__(self, spam, eggs=None):
print spam, eggs
Ich möchte aber nicht den ganzen Konstruktor neu schreiben, sondern den der Basesclass aufrufen, nur eben mit einem Argument. Ich dachte an sowas hier, aber das ruft den Konstruktor unendlich oft auf:
Code: Alles auswählen
class B(A):
# override constructor, `eggs` cannot be specified
def __init__(self, spam):
self.__init__(spam)
P.S. Nun könnte man ja im Anschluss `eggs` trotzdem noch überschreiben. Kann ich das verhindern, indem ich sowas wie eine "protected" Variable benutze, die von der Subclass nicht überschreibbar ist`, also z.B. `__eggs` (ich weiß, überschreiben ginge dann noch durch `B._B__eggs`)?