Tutte le classi derivate da una determinata classe base devono definire un attributo chiamato "percorso". Nel senso di battitura anatra potevo dipendere dalle definizioni nelle sottoclassi:Passare il parametro al costruttore della classe base o utilizzare la variabile di istanza?
class Base:
pass # no "path" variable here
def Sub(Base):
def __init__(self):
self.path = "something/"
ulteriore possibilità sarebbe quella di utilizzare il costruttore della classe base:
class Base:
def __init__(self, path):
self.path = path
def Sub(Base):
def __init__(self):
super().__init__("something/")
io uso Python 3.1.
Cosa preferisci e perché? C'è un modo migliore?
Non c'è niente di fragile in 'super()'. La fragilità è nella sintassi 2.x, che è fissata in 3.x (che l'OP sta usando, come mostrato dalla chiamata 'super()'), e l'ereditarietà multipla in generale. Non c'è alcun motivo per cui sia necessario chiamare il metodo di baseclass direttamente in Python 3.x, la sintassi 'super() .__ init (...)' non è mai peggiore e spesso migliore. –
a giudicare dall'uso di 'super', immagino che deamon stia usando py3k – SilentGhost
@Thomas Wouters: come utilizzeresti super se tutte le classi di ereditarietà e di base multiple con diverse firme del costruttore? Passare tutti gli argomenti delle classi derivate a tutte le classi base appare come un trucco sporco, basandosi su parametri denominati e lasciare che le classi di base risolvano ciò di cui hanno bisogno non è molto più bello. – kriss