Wszystkie klasy wyprowadzone z pewnej klasy bazowej muszą zdefiniować atrybut o nazwie "ścieżka". W sensie kaczka wpisywanie mogę polegać w definicji podklasy:Przekazywanie parametru do konstruktora klasy podstawowej lub użycie zmiennej instancji?
class Base:
pass # no "path" variable here
def Sub(Base):
def __init__(self):
self.path = "something/"
Kolejna możliwo byłoby użyć konstruktora klasy bazowej:
class Base:
def __init__(self, path):
self.path = path
def Sub(Base):
def __init__(self):
super().__init__("something/")
używam Python 3.1.
Co byś chciał i dlaczego? Czy istnieje lepszy sposób?
W "super()" nie ma nic niestabilnego. Kruchość jest w składni 2.x, która jest ustalona w 3.x (z której korzysta OP, jak pokazano przez wywołanie 'super()') i ogólnie dziedziczenia wielokrotnego. Nie ma żadnego powodu, który mógłby nazwać metodę baseclass bezpośrednio w Pythonie 3.x, składnia 'super() .__ init (...)' nigdy nie jest gorsza i często lepsza. –
sądząc z użycia 'super', domyślam się, że Deamon używa py3k – SilentGhost
@Thomas Wouters: w jaki sposób używałbyś super, jeśli posiadasz wiele klas dziedziczenia i bazowych z różnymi sygnaturami konstruktora? Przekazywanie wszystkich argumentów klas pochodnych do wszystkich klas bazowych wygląda jak brudny hack, polegając na nazwanych parametrach i niech klasy bazowe porządkują to, czego potrzebują, nie są o wiele ładniejsze. – kriss