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
<method-wrapper '__lt__' of type object at 0xa15cf0>>>X.__lt__
False>>X.__lt__ == object.__lt__
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:
<class '__main__.X'>>>X.__lt__.__se lf__
['__call__', '__class__', '__cmp__', '__delattr__', '__doc__',>>dir(X.__lt_ _)
'__format__', '__getattribute __', '__hash__', '__init__', '__name__',
'__new__', '__objclass__', '__reduce__', '__reduce_ex__' , '__repr__',
'__self__', '__setattr__', '__sizeof__', '__str__',
'__subclasshook __']
Traceback (most recent call last):>>X.__lt__.__fu nc__
File "<stdin>", line 1, in <module>
AttributeError: 'method-wrapper' object has no attribute '__func__'
Michael Foord
--
http://www.ironpythoninaction.com/