Упростите это:
class A:
def __init__(self, name, c):
self.name = name
self.c = c
class B(A):
def check(self):
print(self.name)
tt = B("tester", "check")
tt.check()
Объект B
будет иметь все то же самое, что и объект A
, поскольку он наследует их. Не нужно реализовывать __init__
на B
, если это не поможет. Вы можете получить доступ к self.name
напрямую, как и в A
. Объект с таким свойством self
. Он установлен на self
, и вы можете получить к нему доступ с помощью self
.
Помните, self
- это экземпляр объекта , а не класс. При выполнении B(...)
, self
в A.__init__(self, ...)
фактически является экземпляром B
.
Вам необходимо явно использовать super
только если вы переопределяете родительские методы, как в:
def __init__(self, name, c):
super().__init__(name, c)
Здесь __init__
является переопределенным , и для выполнения __init__
родителя необходимо получить к нему доступ через super
. Просто self.__init__(name, c)
получит доступ к дочернему методу __init__
, и вы вызовете его в бесконечном рекурсивном цикле.