Ricevo una differenza inspiegabile nel comportamento tra l'utilizzo di super().__init__()
e la chiamata esplicita di un costruttore di super classe nel mio codice.Differenza di comportamento tra super() .__ init __() e superclasse esplicita __init __() in Python
class IPElement(object):
def __init__(self, ip_type='IPv4'):
self.ip_type = ip_type
class IPAddressSimple(IPElement):
def __init__(self, ip_name, ip_type='IPv4'):
self.ip_name = ip_name
super().__init__(self, ip_type=ip_type)
Qui, la linea super().__init__(self, ip_type=ip_type)
risultati in un errore di tipo:
TypeError: __init__() got multiple values for argument 'ip_type'
Quando cambio la chiamata per passare ip_type
per posizione (es super().__init__(self, ip_type)
ottengo un errore differente tipo:
TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given
Nessuno di questi errori ha senso per me e quando sostituisco super()
con il nome esplicito della superclasse, tutto funziona come previsto. I seguenti funziona bene, come fa passando ip_type in base alla posizione:
class IPAddressSimple(IPElement):
def __init__(self, ip_name, ip_type='IPv4'):
self.ip_name = ip_name
IPElement.__init__(self, ip_type=ip_type)
posso certamente utilizzare una chiamata esplicita al metodo della superclasse __init__
se necessario, ma vorrei capire perché super()
non funziona qui.
Come sempre, i problemi più sconcertanti si rivelano avere le spiegazioni più semplici. Grazie per la risposta chiara e concisa! – qdet