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

与 mypy 和 pytorch 不安全地重叠签名

如何解决与 mypy 和 pytorch 不安全地重叠签名

我在使用 mypy 和 PyTorch 时遇到了问题,我不确定这是错误还是我不明白的问题。在此示例中,我尝试为可以乘以张量的自定义类编写 __mul____rmul__。但是,当我编写 __rmul__ 的签名时,我从 mypy 收到错误警告:Signatures of "__rmul__" of "TestClass" and "__mul__" of "Tensor" are unsafely overlapping。这是我的 MWE,显示错误

from torch import Tensor

class TestClass:
    def __rmul__(self,other: Tensor) -> "TestClass"
        ...

我最好的猜测是 Tensor.__mul__ 的签名为 __mul__(self,other) -> Tensor,而 other 被隐式定义为 Any。因此,mypy 无法判断 tensor_var * test_class_var 是否会产生 TensorTestClass 类型的对象,即使我知道它会产生 TestClass。这个解释正确吗?如果是这样,是否有任何方法可以抑制此输出,或通知 mypy Tensor.__mul__ 实际上不适用于 TestClass 的实例?

有趣的是,这只发生在 __rmul__ 上。定义 TestClass.__mul__ 不会导致此问题。

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