python - python中超类中方法类型的方法类型
问题描述
我对 Python 的打字系统还很陌生,直到现在我还没有在我查看的文档中找到这个描述。
IfAsub
是 的子类Bsup
,并且Asub
有一个名为 的多参数方法foo
。foo
在注释in的类型时我应该做什么以及应该避免什么Asub
?例如,我是否应该始终确保子类中的返回类型与超类中的返回类型完全相同,或者子类中的返回类型至少是超类中的返回类型的超类?那么争论呢?子类中方法的参数应该始终是相同类型还是超类中参数的子类型?
另外,如果(通常情况下),如果类型与超类中的类型完全相同,我是否需要在子类中的方法上声明类型?
class Bsup:
def foo(self, x: A) -> B:
...
class Asub (Bsup):
def foo(self, x: X) -> Y:
...
解决方案
我在 mypy 文档中找到了答案。 覆盖静态类型的方法
本文档解释并给出了派生类中返回更具体对象的方法的示例,并对返回值进行了注释。它还解决了一些错误情况,并暗示了 mypy 如何处理协变和逆变。因此,我对文档的解释给出了 mypy 在多大程度上实现 LSP 的一些迹象。
推荐阅读
- tooltip - 为什么我的 AmChart XYChart 只显示多个系列的单个工具提示?
- android - 尽管我确定是,但未找到默认活动?
- php - 使用 Docker 使用 dblib 将 php 5.5 连接到 MSSQL
- c - 为什么我的 TIMER0 不使用 Atmega644 控制器上 XTAL1 和 XTAL2 之间的振荡器?
- reactjs - 当我在前端使用 ReactJS 库时,如何在 www.mywebsite.com/robot.txt 拥有 robots.txt 文件?
- javascript - jQuery 带参数的淡入淡出功能
- vba - 需要循环代码以从文档中获取文本并将其粘贴到另一个文档中
- swift - 如何快速从结构中过滤
- java - 更新关系时更新@LastModifiedDate
- encryption - 为什么我不能使用密码作为加密密钥来安全地加密密码?