Alle von einer bestimmten Basisklasse abgeleiteten Klassen müssen ein Attribut namens "path" definieren. Im Sinne der Ente eingeben konnte ich auf Definition verlassen in den Unterklassen:Parameter an Basisklassenkonstruktor übergeben oder Instanzvariable verwenden?
class Base:
pass # no "path" variable here
def Sub(Base):
def __init__(self):
self.path = "something/"
Eine andere Möglichkeit wäre es, die Basisklassenkonstruktor zu verwenden:
class Base:
def __init__(self, path):
self.path = path
def Sub(Base):
def __init__(self):
super().__init__("something/")
verwende ich Python 3.1.
Was würden Sie bevorzugen und warum? Gibt es einen besseren Weg?
Es gibt nichts Zerbrechliches an 'super()'. Die Fragilität ist in der 2.x-Syntax, die in 3.x (die das OP verwendet, wie durch den Aufruf 'super() 'gezeigt wird), und Mehrfachvererbung im Allgemeinen behoben. Es gibt keinen Grund, die baseclass-Methode direkt in Python 3.x zu verwenden, die 'super() .__ init (...)' -Syntax ist niemals schlechter und oft besser. –
durch die Verwendung von "Super" zu urteilen, würde ich vermuten, dass Deamon py3k verwendet – SilentGhost
@Thomas Wouters: Wie würden Sie Super verwenden, wenn Sie alle mehrere Vererbungs- und Basisklassen mit verschiedenen Konstruktorsignaturen? Alle Argumente abgeleiteter Klassen an alle Basisklassen zu übergeben sieht wie ein schmutziger Hack aus, der sich auf benannte Parameter stützt und Basisklassen aussortieren lässt, was sie brauchen, ist nicht viel schöner. – kriss