__init__() 方法被覆盖,即使我使用了 super()。为什么?

The __init__() method gets overridden even though I used super(). Why?

如标题所示,我在继承class__init__方法中启动了超级class__init__方法,但它仍然被覆盖,或者至少我认为它做。我希望 self.x = x 也能在继承 class 中工作。

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

这是因为您没有在 super 调用中传递 x on。应该是:

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

但是请注意,此方法完全没有意义。如果你想做一些不同于超类版本的事情,你应该只覆盖一个方法。在这种情况下你不需要;您应该从 Con.

中完全删除该方法