在不可变类的 linting 和重写期间,操作不会通过 mypy 检查器。 该类实现了诸如
__add__
之类的操作,但是,每个返回同一类的新实例的函数都会触发打字错误Incompatible return value type (got "Point", expected "Self") [return-value]mypy(error)
我尝试过的方法:
T = TypeVar("T", bound="A")
由于参数 T 绑定到 A,mypy 会将实例化 A() 识别为 T 的子类class A(Generic[T])
同上return cast(T, A())
这可行,但需要将强制转换分散在整个代码中。有没有一个不严重依赖cast()的解决方案?
from typing import Self
class A():
def meth(self, other:Self) -> Self:
return A()
解决您问题的最简单方法是:
class A:
def meth(self, other: "A") -> "A":
return A()
我相信这里使用
Self
的问题在于,它错误地暗示返回类型基于 self
的类型,但事实并非如此,因为你已经硬编码了 A()
。
另一个解决方案是:
class A:
def meth(self, other: Self) -> Self:
return type(self)()