Если мы класс A
, определяется следующим образом,Зачем использовать super() вместо __init __()?
class A:
def __init__(self, x):
self.x = x
почему большинство людей используют
class B(A):
def __init__(self, x, y):
super().__init__(x)
self.y = y
вместо
class B(A):
def __init__(self, x, y):
A.__init__(self, x)
self.y = y
? Я думаю, что A.__init__(self, x)
лучше тогда super().__init__(x)
, поскольку он поддерживает множественное наследование (и я не нашел способ сделать это с super()
):
class A:
def __init__(self, x):
self.x = x
class B:
def __init__(self, y):
self.y = y
class C(A, B):
def __init__(self, x, y, z):
A.__init__(self, x)
B.__init__(self, y)
self.z = z
Когда я пытаюсь использовать super()
в предыдущем примере, как это :
class A:
def __init__(self, x):
self.x = x
class B:
def __init__(self, y):
self.y = y
class C(A, B):
def __init__(self, x, y, z):
super().__init__(self, x)
super().__init__(self, y)
self.z = z
класс C
не имеет атрибут y
(попробуйте: c = C(1, 2, 3)
и print(c.y)
в следующей строке).
Что я делаю неправильно?
'супер' является ** именно для ** множественного наследования, поэтому вам не нужно явно вызывать метод на всех отдельных суперклассах. – jonrsharpe