如何解决与 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
是否会产生 Tensor
或 TestClass
类型的对象,即使我知道它会产生 TestClass
。这个解释正确吗?如果是这样,是否有任何方法可以抑制此输出,或通知 mypy Tensor.__mul__
实际上不适用于 TestClass
的实例?
有趣的是,这只发生在 __rmul__
上。定义 TestClass.__mul__
不会导致此问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。