I am very confused by the following behavior. I have a base class which defines __eq__. I then have a subclass which does not. When I evaluate the expression a==b, where a and b are elements of these classes, __eq__ is always called with the subclass as the first argument, regardless of the order I write my expression. I can't see why this would be desired behavior.
A sample code for clarity: class c1(object): def __eq__(self, op): print "Calling c1.__eq__("+str(type(self))+","+str(type(op))+")" return False class c2(c1): pass a1=c1() a2=c2() a1==a2 a2==a1 The output is: Calling c1.__eq__(<class '__main__.c2'>,<class '__main__.c1'>) Calling c1.__eq__(<class '__main__.c2'>,<class '__main__.c1'>) Why does a1==a2 generate a call to c1.__eq__(a2, a1) instead of c1.__eq__(a1, e2)? This is important because I am writing a math library in which '==' is being used for assignment, i.e., 'a==b+c' set 'a' equal to the sum of 'b' and 'c'. So 'a==b' is very different from 'b==a'. -- Daniel M. Israel [EMAIL PROTECTED] -- http://mail.python.org/mailman/listinfo/python-list