With the old style classes simply using hasattr works:
>>> class old:
... pass
...
>>> hasattr(old, '__eq__')
False
Using the new style classes every class has the attribute __eq__:
>>> class nsc(object):
... pass
...
>>> hasattr(nsc, '__eq__')
True
This is the expected behaviour as hasattr(object, '__eq__') also returns True. This is true for every rich comparison method.
How to verify if class implements a rich comparison method if I can't use hasattr? One thing that comes to mind is to call the method and see if it raises a NotImplemented exception. But calling those methods may have unexpected damages.
You can do it by using
dirinstead ofhasattr. Rich comparison methods don't appear in the list returned by thedirfunction.