Python 为什么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,但在上述代

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