[Python-Dev] rich comparisions and old-style classes

Fredrik Lundh fredrik at pythonware.com
Sun Apr 30 08:13:40 CEST 2006


trying to come up with a more concise description of the rich
comparision machinery for pyref.infogami.com, I stumbled upon
an oddity that I cannot really explain:

in the attached example below, why is the rich comparision
machinery doing *four* attempts to use __eq__ in the old-
class case?

</F>

$ more test.py

class old:
    def __init__(self, name):
        self.name = name
    def __repr__(self):
        return self.name
    def __eq__(self, other):
        print "EQ", self, other
        return NotImplemented
    def __cmp__(self, other):
        print "CMP", self, other
        return 0

class new(object):
    def __init__(self, name):
        self.name = name
    def __repr__(self):
        return self.name
    def __eq__(self, other):
        print "EQ", self, other
        return NotImplemented
    def __cmp__(self, other):
        print "CMP", self, other
        return 0

a = old("A")
b = old("B")

print a == b

a = new("A")
b = new("B")

print a == b

$ python test.py

EQ A B
EQ B A
EQ B A
EQ A B
CMP A B
True
EQ A B
EQ B A
CMP A B
True






More information about the Python-Dev mailing list