避免在python子类中破坏liskov替换原则

避免在python子类中破坏liskov替换原则,python,static,mypy,liskov-substitution-principle,Python,Static,Mypy,Liskov Substitution Principle,比如说,我们有一个类,它执行一个复杂的操作来产生一个结果。然后我想要一堆子类,它们做同样的事情,但将结果变异成另一个实例。这在python中起作用,并创建了一种生成每个子类的相对较好的方法(调用super并继续执行操作),但我知道这打破了Liskov替换原则。我将如何重构它以遵守原则 class Super: def produce(value: int) -> int: return value * 2 # imagine this is a complex oper

比如说,我们有一个类,它执行一个复杂的操作来产生一个结果。然后我想要一堆子类,它们做同样的事情,但将结果变异成另一个实例。这在python中起作用,并创建了一种生成每个子类的相对较好的方法(调用super并继续执行操作),但我知道这打破了Liskov替换原则。我将如何重构它以遵守原则

class Super:
   def produce(value: int) -> int:
       return value * 2 # imagine this is a complex operation. 

class Sub(Super):
   def produce(value: int) -> str:
       return str(super().produce(value)). # converting to another type
长话短说,请看一看:您可能缺少一个继承点,这不是为了代码重用,请尝试使用组合