Я получаю необъяснимую разницу в поведении между использованием super().__init__()
и явным вызовом конструктора суперкласса в моем коде.
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)
Здесь строка super().__init__(self, ip_type=ip_type)
приводит к ошибке типа:
TypeError: __init__() got multiple values for argument 'ip_type'
Когда я изменяю вызов для передачи ip_type
по положению (например, super().__init__(self, ip_type)
, я получаю ошибку другого типа:
TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given
Ни одна из этих ошибок не имеет для меня смысла, и когда я заменяю super()
явным именем суперкласса, все работает, как и ожидалось. Следующее работает отлично, как и передача ip_type по положению:
class IPAddressSimple(IPElement):
def __init__(self, ip_name, ip_type='IPv4'):
self.ip_name = ip_name
IPElement.__init__(self, ip_type=ip_type)
Я, конечно, могу использовать явный вызов метода __init__
суперкласса, если это необходимо, но я хотел бы понять, почему super()
здесь не работает.