Python 为什么MyPy拒绝发现这个问题?
这是MyPy的一个限制:它不能推断应该通过Python 为什么MyPy拒绝发现这个问题?,python,mypy,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,但在上述代
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执行更多的数据流分析。)