Python: come si fa a ricordare l'ordine degli argomenti `di super`?
Domanda
Come dice il titolo, come si fa a ricordare l'ordine degli argomenti di super
? C'è una qualche parte mnemonico che ho perso?
Dopo anni di programmazione Python, devo ancora guardare in su: (
(per la cronaca, è super(Type, self)
)
Soluzione
L'eredità mi fa pensare ad una classificazione gerarchia . E l'ordine degli argomenti di super
è gerarchica:. Prima della classe, quindi l'istanza
Un'altra idea, ispirata alla risposta da ~ unutbu:
class Fubb(object):
def __init__(self, *args, **kw):
# Crap, I can't remember how super() goes!?
Passi nella costruzione di una chiamata super()
corretta.
__init__(self, *args, **kw) # Copy the original method signature.
super(Fubb).__init__(self, *args, **kw) # Add super(Type).
/
-------
/
super(Fubb, self).__init__(*args, **kw) # Move 'self', but preserve order.
Altri suggerimenti
È sufficiente ricordare che il self
è opzionale - super(Type)
dà accesso ai metodi della superclasse non legati -. E argomenti opzionali vengono sempre ultima
non lo faccio. In Python 3 possiamo solo scrivere
super().method(params)
In genere, super
è all'interno usato di una definizione class
. Lì, (ancora una volta in genere), il primo argomento di super
dovrebbe sempre essere il nome del class
.
class Foo(object):
def __init__(self,*args,**kw):
super(Foo,self).__init__(*args,**kw)