问题描述
这是 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 执行的数据流分析更多。)