[EMAIL PROTECTED] wrote: > </pre> > $ cat cmp.py > > class A: > def __init__(self, b): > self.b = b > def __cmp__(self, other): > return self.b == other.b > > class B: > pass > > if __name__ == '__main__': > b = B() > a1 = A(b) > a2 = A(b) > print a1 == a2 > print a1 == a1 > > $ python cmp.py > False > False > </pre> > > I swear I am not drunk, but why isn't a1 == a2 and worse why isn't a1 > == a1? Does someone have a clue and can explain to me this suprising > behavior? (python 2.4.3 on Ubuntu 6.06).
__cmp__() must return 0 for equal objects: >>> 1 .__cmp__(0), 1 .__cmp__(1), 1 .__cmp__(2) (1, 0, -1) You might have a look at rich comparison before you proceed: >>> class A(object): ... def __init__(self, b): ... self.b = b ... def __eq__(self, other): ... return self.b == other.b ... >>> A(1) == A(1) True >>> A(1) == A(42) False Peter -- http://mail.python.org/mailman/listinfo/python-list