微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 MyPy 拒绝发现任何问题?

如何解决为什么 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 执行的数据流分析更多。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。