我希望抽象类的实现接受一个整数。为此,我可以
tree
然后实现将类似于
from abc import ABC, abstractmethod
class Base(ABC):
@abstractmethod
def __init__(self, i: int):
pass
但是由于我可以在不违反LSP的情况下更改class Sub(Base):
def __init__(self, i: int):
...
的签名,因此我也可以
__init__
,class Sub2(Sub):
def __init__(self, s: str):
...
的签名会丢失,并且Base.__init__
不会强制执行。也就是说,只有ABC
的直接后代必须具有相同的Base
签名。如果严格要求子类调用超类的__init__
方法,这将不是问题,因为__init__
需要向Sub2
提供一个int
,但是默认情况下是可选的
鉴于此,将Sub
做成抽象有意义吗?或者,更广泛地说,应该期望子类具有给定的类型签名吗?