python - 为什么 MyPy 拒绝发现这有什么问题?
问题描述
这是 MyPy 的一个限制:它不能推断出应该通过的类型super().x
吗?
class A:
def x(self, r: int) -> None:
pass
class C(A):
def x(self, *args) -> None:
super().x(*args)
def _() -> None:
c = C()
c.x('')
c.x('')
尽管传递了一个A.x
采用 int的字符串,但在上面的代码中没有发现错误。这似乎是应该推断的。
有没有办法让它识别打字错误?
解决方案
你没有注释*args
,所以它是隐含的Any
。此代码中涉及的所有调用都是静态有效的。
如果你注释它:
def x(self, *args: int) -> None:
然后 mypy 报告类型错误。(尽管如此,它仍然不会报告错误c.x(1, 2)
。这将需要对*
调用进行令人不安的严格规则,或者需要比 mypy 执行更多的数据流分析。)
推荐阅读
- javascript - 设置没有删除项目的状态
- powershell - 如何使用 7zip.exe 在 Powershell 中加速解压缩过程
- verilog - 使用 xilinx vivado 2018.2 在 systemverilog 中随机化 32 位值
- git - 合并 git 分支。我的本地分支在许多已移动到 master 上的文件中有数百个小编辑
- c# - DocuSign JWT 身份验证:意外的 PEM 类型
- wordpress - 在本地主机上安装 WordPress
- kdb - KDB - 似乎无法将 csv 文件导入表
- javascript - 每次调用的多个 ajax 调用都会更新变量
- html - 应用 tbody 时的区别 td:nth-of-type(3){ border-bottom-color: transparent; } 和 tr.noborder td{ 边框底部:透明;} 在 CSS 中
- php - PDO lastInsertid() 返回 false,即使我的查询运行良好。给出 0000 代码错误