我具有以下功能:
def __eq__(self, other: object) -> Union[bool, NotImplemented]:
try:
for attr in ["name", "variable_type"]:
if getattr(self, attr) != getattr(other, attr):
return False
return True
except AttributeError:
return NotImplemented # Expression has type "Any"
我正在运行mypy,它告诉我NotImplemented的类型为“ Any”,这显然是不受欢迎的。
是否可以使用更好的类型来消除此错误?还是应该放一个type: ignore
并继续前进? (此外,我在返回类型中使用NotImplemented
是否正确?)
答案 0 :(得分:6)
它是Tree<T>
。
NotImplementedType
意思是,您可以这样定义函数:
type(NotImplemented)
# NotImplementedType
现在,def foo(self, other: object) -> Union[bool, type(NotImplemented)]:
pass
给出了
help(foo)
顺便说一句,值得一提的是help(foo)
# Help on function foo in module __main__:
#
# foo(self, other:object) -> Union[bool, NotImplementedType]
是具有特定用途的单例对象(用于指示未在对象上定义特定操作)。您几乎几乎不需要访问它的类型,据我所知,您无处可导入NotImplemented
。
我只将NotImplementedType
定义为
__eq__
当返回def foo(self, other: object) -> bool:
pass
时,应该理解这不是一个有效的结果,而是表明相等比较无效的指示。