Q: Subclassing dict and __cmp__
Hans Nowak
wurmy at earthlink.net
Sun Oct 20 13:06:43 EDT 2002
Miki Tebeka wrote:
>>>>class H(dict):
>>>
> def __cmp__(self, other):
> '''Compare only x's'''
> if self['x'] == other['x']:
> return 0
> return 1
What do you want this code to do when 'x' doesn't exist in either of the
dictionaries?
Also, __cmp__ doesn't return just 0 or 1... it is supposed to return -1 if self
< other, 0 if self == other, and 1 if self > other.
Third, overriding just __cmp__ may not be enough. There's also the __eq__
method. Here's my version (untested and all that), with print statements so
it's clear which method is called:
>>> class H(dict):
def __cmp__(self, other):
print 'wheee!'
return cmp(self['x'], other['x'])
def __eq__(self, other):
print '__eq__ called'
return self['x'] == other['x']
>>> h1 = H({'x': 2})
>>> h2 = H({'x': 3})
>>> h1 > h2
wheee!
0
>>> h2 > h1
wheee!
1
>>> h1 == h2
__eq__ called
0
>>> h1 == h1
__eq__ called
1
HTH,
--
Hans (base64.decodestring('d3VybXlAZWFydGhsaW5rLm5ldA=='))
# decode for email address ;-)
The Pythonic Quarter:: http://www.awaretek.com/nowak/
Kaa:: http://www.awaretek.com/nowak/kaa.html
More information about the Python-list
mailing list