ordering with duck typing in 3.1

mwilson at the-wire.com mwilson at the-wire.com
Sat Apr 7 10:44:30 EDT 2012


Thomas Rachel wrote:

> Am 07.04.2012 14:23 schrieb andrew cooke:
> 
>> class IntVar(object):
>>
>>      def __init__(self, value=None):
>>          if value is not None: value = int(value)
>>          self.value = value
>>
>>      def setter(self):
>>          def wrapper(stream_in, thunk):
>>              self.value = thunk()
>>              return self.value
>>          return wrapper
>>
>>      def __int__(self):
>>          return self.value
>>
>>      def __lt__(self, other):
>>          return self.value<  other
>>
>>      def __eq__(self, other):
>>          return self.value == other
>>
>>      def __hash__(self):
>>          return hash(self.value)
> 
>> so what am i missing?
> 
> If I don't confuse things, I think you are missing a __gt__() in your
> IntVar() class.
> 
> This is because first, a '2 < three' is tried with 2.__lt__(three). As
> this fails due to the used types, it is reversed: 'three > 2' is
> equivalent. As your three doesn't have a __gt__(), three.__gt__(2) fails
> as well.

Practically, yes.  Just that that's not what the documentation says.  Looks 
like Python no longer tries to cobble together missing relations based on 
the "usual" properties of ordering.

	Mel.




More information about the Python-list mailing list