什么是NotImplemented?

时间:2019-06-16 03:25:04

标签: python python-3.x

我具有以下功能:

   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是否正确?)

1 个答案:

答案 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 时,应该理解这不是一个有效的结果,而是表明相等比较无效的指示。