首页 > 解决方案 > python中超类中方法类型的方法类型

问题描述

我对 Python 的打字系统还很陌生,直到现在我还没有在我查看的文档中找到这个描述。

IfAsub是 的子类Bsup,并且Asub有一个名为 的多参数方法foofoo在注释in的类型时我应该做什么以及应该避免什么Asub?例如,我是否应该始终确保子类中的返回类型与超类中的返回类型完全相同,或者子类中的返回类型至少是超类中的返回类型的超类?那么争论呢?子类中方法的参数应该始终是相同类型还是超类中参数的子类型?

另外,如果(通常情况下),如果类型与超类中的类型完全相同,我是否需要在子类中的方法上声明类型?

class Bsup:
  def foo(self, x: A) -> B:
     ...

class Asub (Bsup):
  def foo(self, x: X) -> Y:
    ...

标签: pythontype-hintingpython-typingliskov-substitution-principle

解决方案


我在 mypy 文档中找到了答案。 覆盖静态类型的方法

本文档解释并给出了派生类中返回更具体对象的方法的示例,并对返回值进行了注释。它还解决了一些错误情况,并暗示了 mypy 如何处理协变和逆变。因此,我对文档的解释给出了 mypy 在多大程度上实现 LSP 的一些迹象。


推荐阅读