Ich bekomme einen unerklärlichen Unterschied im Verhalten zwischen super().__init__()
und explizit einen Super-Klasse-Konstruktor in meinem Code aufrufen.Verhalten Unterschied zwischen super() .__ init __() und explizite Oberklasse __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)
Hier ist die Linie super().__init__(self, ip_type=ip_type)
Ergebnisse in einer Art Fehler:
TypeError: __init__() got multiple values for argument 'ip_type'
Wenn ich den Anruf ändern ip_type
von Position zu gelangen (zB super().__init__(self, ip_type)
ich eine andere Art Fehler:
TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given
Keiner dieser Fehler macht Sinn für mich, und wenn ich super()
durch den expliziten Namen der Oberklasse, alles ersetzen funktioniert wie erwartet. Die folgenden funktioniert gut, ebenso wie ip_type von Position vorbei:
class IPAddressSimple(IPElement):
def __init__(self, ip_name, ip_type='IPv4'):
self.ip_name = ip_name
IPElement.__init__(self, ip_type=ip_type)
ich sicherlich einen expliziten Aufruf der übergeordneten Klasse __init__
Methode bei Bedarf verwenden können, aber ich möchte verstehen, warum super()
ist hier nicht arbeiten.
Wie immer, die meisten verwirrenden Probleme stellen sich heraus, um die einfachsten Erklärungen zu haben. Danke für die klare, prägnante Antwort! – qdet