Метод __init __ () переопределяется, хотя я использовал super ().Зачем? - PullRequest
0 голосов
/ 03 июня 2019

Как и в заголовке, я инициировал метод суперкласса __init__ в методе наследования класса __init__, но он все еще переопределяется, или, по крайней мере, я так думаю.Я хочу, чтобы self.x = x работал в классе наследования.

class Abs(ABC):
    def __init__(self, x: int = 1, *args, **kwargs) -> None:
        super().__init__(*args, **kwargs)
        self.x = x

    @abstractmethod
    def foo(self):
        pass

class Con(Abs):
    def __init__(self, x: int = 1, *args, **kwargs) -> None:
        super().__init__(*args, **kwargs)

    def foo(self):
        print(self.x)

obj = Con(x=4)
obj.foo() # <---- this here returns 1 instead of 4

1 Ответ

2 голосов
/ 03 июня 2019

Это потому, что вы не передаете x во время супер-вызова.Должно быть:

def __init__(self, x: int = 1, *args, **kwargs) -> None:
    super().__init__(x, *args, **kwargs)

Однако обратите внимание, что этот метод совершенно бессмысленный .Вы должны переопределить метод, только если вы хотите сделать что-то отличное от версии суперкласса.В этом случае вы не делаете;Вы должны полностью удалить метод из Con.

...