与标题中一样,我在继承类__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
答案 0 :(得分:2)
这是因为您没有在超级通话中传递x
。应该是:
def __init__(self, x: int = 1, *args, **kwargs) -> None:
super().__init__(x, *args, **kwargs)
但是,请注意,此方法完全没有意义。如果要执行与超类版本不同的操作,则仅应覆盖方法。在这种情况下,您不会;您应该从Con中完全删除该方法。