如何验证 class 是否实现了丰富的比较方法?

How to verify if class implements a rich comparison method?

使用旧样式 classes 只需使用 hasattr 即可:

>>> class old:
...     pass
...
>>> hasattr(old, '__eq__')
False

使用新样式 classes 每个 class 都有属性 __eq__:

>>> class nsc(object):
...     pass
...
>>> hasattr(nsc, '__eq__')
True

这是预期的行为,因为 hasattr(object, '__eq__') 也是 returns True。对于每一种丰富的比较方法都是如此。

如果我不能使用 hasattr,如何验证 class 是否实现了丰富的比较方法?我想到的一件事是调用该方法并查看它是否引发 NotImplemented 异常。但是调用这些方法可能会有意想不到的伤害。

您可以使用 dir 而不是 hasattr 来完成。丰富的比较方法不会出现在 dir 函数返回的列表中。

>>> class nsc(object):
...     pass
...
>>> '__eq__' in dir(nsc)
False