我有一个类型,在这个类型中,等式比较没有意义。显式比较这个类型的两个实例的引用或值相等性将表明调用代码中存在逻辑错误。
定义__eq__
引发异常是否不好?这方面有什么陷阱吗?它是否作为某些常见操作的一部分隐式调用?
在像Haskell这样的语言中,我将简单地不实现Equal类型类,并且尝试比较将是编译错误。由于Python是完全动态的,如果此定义不是一个好主意,我有哪些选项可以帮助鼓励正确使用?
我可以返回NotImplemented
,但然后它会回退到比较,最终将导致身份比较,如果RHS也返回NotImplemented
,而我仍然不想要那个。
==
运算符,应该使用其他运算符或函数代替。 - Dunesa is b
,会导致什么错误?(这不是批评,我想在这里学到一些东西?) - Ian McLaird__eq__
抛出异常会防止你的类被用作字典中的键。字典是一种常见的方式,可以将任意值“附加”到可比较引用对象上。 - user319799