custom sorting and __cmp__
Lee Harr
missive at frontiernet.net
Sun Nov 30 11:13:15 EST 2003
Let's say I have a class
class A:
def __init__(self, level):
self.level = level
and I want to put some of these in a list and sort the list
by level
a1 = A(1)
a2 = A(2)
l = [a1, a2]
l.sort()
Am I better off creating a __cmp__ method for my class or
making a cmp function to pass to sort?
My thought was that __cmp__ would be perfect, but then I
started thinking about this ...
>>> class A:
... def __init__(self, level):
... self.level = level
... def __cmp__(self, other):
... if self.level > other.level:
... return 1
... elif self.level < other.level:
... return -1
... else:
... return 0
...
>>> a1 = A(1)
>>> a2 = A(2)
>>> class C:
... pass
...
>>> c = C()
>>> a1 == a2
False
>>> a1 < a2
True
>>> a1 == c
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<stdin>", line 5, in __cmp__
AttributeError: C instance has no attribute 'level'
Should I be catching comparisons to objects that do not have
my 'level' attribute and falling back to id comparison?
Or am I worried about nothing (YAGNI :o) ?
Is this related in any way to interfaces?
More information about the Python-list
mailing list