Hello all, I may well be being dumb (it has happened before), but I'm struggling to fix some code breakage with Python 2.6.
I have some code that looks for the '__lt__' method on a class: if hasattr(clr, '__lt__'): However - in Python 2.6 object has grown a default implementation of '__lt__', so this test always returns True. >>> class X(object): pass ... >>> X.__lt__ <method-wrapper '__lt__' of type object at 0xa15cf0> >>> X.__lt__ == object.__lt__ False So how do I tell if the X.__lt__ is inherited from object? I can look in the '__dict__' of the class - but that doesn't tell me if X inherits '__lt__' from a base class other than object. (Looking inside the method wrapper repr with a regex is not an acceptable answer...) Some things I have tried: >>> X.__lt__.__self__ <class '__main__.X'> >>> dir(X.__lt__) ['__call__', '__class__', '__cmp__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__name__', '__new__', '__objclass__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__'] >>> X.__lt__.__func__ Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'method-wrapper' object has no attribute '__func__' Hmmm... I can get this working with Python 2.6 with: if '__lt__' in dir(cls): The default implementation of '__lt__' doesn't appear in the dir of classes. However this fails with Python 3 where the default implementation *does* appear in the output of 'dir'. Any suggestions? Michael Foord -- http://www.ironpythoninaction.com/ -- http://mail.python.org/mailman/listinfo/python-list