custom sorting and __cmp__
missive at frontiernet.net
Sun Nov 30 17:13:15 CET 2003
Let's say I have a class
def __init__(self, level):
self.level = level
and I want to put some of these in a list and sort the list
a1 = A(1)
a2 = A(2)
l = [a1, a2]
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
... return 0
>>> a1 = A(1)
>>> a2 = A(2)
>>> class C:
>>> c = C()
>>> a1 == a2
>>> a1 < a2
>>> 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