Вызов дочернего метода для родительского класса и получение ошибки, связанной с отсутствием атрибута - PullRequest
0 голосов
/ 10 мая 2019

Ниже приведен пример кода.Я пытаюсь реализовать подобное в обширном коде.

Я провел достаточно исследований по этому вопросу, но не смог найти какое-либо конкретное объяснение, связанное с моей проблемой.

class A:
    def __init__(self,a,b):
        self.a = a
        self.b = b
        self.e = self.gete()
    def typing(self):
        return self.d
    def gete(self):
        return self.d +1

class B(A):
    def __init__(self,a,b,c):
        super().__init__(a,b)
        self.c = c
        self.d = self.getd()

    def getd(self):
        return self.c+1

kk = B(1,2,3)
print(kk.typing())
print(kk.e)

Мой ожидаемый результат - 5. Но вместо этого он вызывает ошибку.

"AttributeError: 'B' object has no attribute'" Но на самом деле у него есть строка "self.d = self.getd()".

1 Ответ

2 голосов
/ 10 мая 2019

В вашем B.__init__() вы звоните super().__init__(), прежде чем назначить self.d.Следовательно, во время вызова A.__init__(), у объекта нет атрибута d, поэтому A.gete() не удается.

Чтобы это исправить, вы можете вызвать super().__init__() после настройка self.d в B.__init__().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...