小智 9
@Joe Kington的解决方案有效(如果有__dict__一些对象,包括内置__eq__函数,没有一个),并且适用于两个__eq__dicts的所有值(写得很糟糕的异常等).但它是非常不可思议的.它甚至不能正确处理名义上的子类型......更不用说结构子类型(即可以使用的类型/用于鸭子类型).不要这样做.
但通常你最好使用手工定制的__eq__方法,只比较一些重要的属性.例如,Rational应该只比较分子和分母,仅此而已.
阐述德尔南的答案:
_NOTFOUND = object()
class Rational(object):
def __eq__(self, other):
for attr in ['numerator', 'denominator']:
v1, v2 = [getattr(obj, attr, _NOTFOUND) for obj in [self, other]]
if v1 is _NOTFOUND or v2 is _NOTFOUND:
return False
elif v1 != v2:
return False
return True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25514 次 |
| 最近记录: |