在Python中抽象的`def __init__`是否有意义?

时间:2019-05-08 11:52:36

标签: python initializer abstract-methods

我希望抽象类的实现接受一个整数。为此,我可以

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做成抽象有意义吗?或者,更广泛地说,应该期望子类具有给定的类型签名吗?

0 个答案:

没有答案