Die übergabe-parameter auf Basis Konstruktor der Klasse oder die Instanz-variable?
Alle Klassen, die von einer bestimmten Basisklasse zu definieren, die ein Attribut namens "path". Im Sinne von duck typing, ich könnte verlassen sich auf definition in den Unterklassen:
class Base:
pass # no "path" variable here
def Sub(Base):
def __init__(self):
self.path = "something/"
Andere Möglichkeit wäre die Verwendung der Basisklasse Konstruktor:
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ürdet Ihr bevorzugen und warum? Gibt es einen besseren Weg?
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Python 3.0+:
Ich gehe mit einem parameter an die Basisklasse s Konstruktor, wie Sie im zweiten Beispiel. Als diese Kräfte-Klassen die Ableitung von der Basis, um den erforderlichen Pfad-Eigenschaft, die Dokumente, die die Tatsache, dass die Klasse besitzt eine solche Eigenschaft, und dass abgeleitete Klassen sind erforderlich, um es. Ohne es, würden Sie sich auf dieses Wesen erklärte (und Lesen) irgendwo in Ihrer Klasse den docstrings, obwohl es sicherlich hilft auch der Staat in den docstring, was die Eigenschaft bedeutet.
In Python 2.6+:
Ich würde weder von oben; stattdessen würde ich verwenden:
In anderen Worten, ich würde verlangen, dass solche parameter in der Basisklasse s Konstruktor, weil es dokumentiert die Tatsache, dass alle diese Typen haben/benutzen/benötigen, die bestimmten parameter und die parameter werden muss provieded. Allerdings würde ich kein super() als super ist etwas brüchig und gefährlich in Python, und ich würde auch Base eine new-style class durch Erben von Objekt (oder eine andere neue Stil -) Klasse.
super()
. Die Fragilität ist in der 2.x-syntax, die Feste in 3.x (die der OP verwenden, wie gezeigt, durch diesuper()
nennen), und mehrfache Vererbung im Allgemeinen. Es gibt keinen Grund, was so überhaupt zu nennen, die baseclass-Methode direkt in Python 3.x, diesuper().__init(...)
syntax ist nie schlechter und oft besser.super
würde ich sagen, dass Dämon ist mit py3k