今天在我升级了使用的 mypy 版本后,我的某些代码里出现了一个类型警告。关于这个问题似乎没有太多的文献资料,所以希望这里能有人帮助我解决!
我定义了一个如下的元类...
from __future__ import annotations
class MyMetaClass(type):
def __new__(mcs,
name: str,
bases: Tuple[type, ...],
namespace: Dict[str, Any],
) -> MyMetaClass:
# Custom code... doesnt matter
# ...
# ...
return type.__new__(mcs, name, bases, namespace)
今天,mypy开始输出以下错误...
error: Incompatible return value type (got "type", expected "MyMetaClass")
我尝试了以下几种 return 语句的写法,但都没有成功...
return super().__new__(mcs, name, bases, namespace)
return super(MyMetaClass, mcs).__new__(mcs, name, bases, namespace)
有什么建议可以避免这个警告吗?最终我选择了一个强制类型转换的方法...但是感觉肯定有更好的办法。
return cast(MyMetaClass, super().__new__(mcs, name, bases, namespace))
from __future__ import annotations
开头,以便首先允许你推迟注释评估? - ShadowRangerT = TypeVar('T', bound='MyMetaClass')
,仍然会出现错误,现在是不兼容的返回值类型(得到"类型",期望"T")
。 - wakey