Instance comparison is not necessarily the same as string comparison. Neither __str__ nor __repr__ are implicitly used at all for comparison.

In fact, by default a pair of instances are not equal unless they are the same object. To define comparison to mean something, you need to define __cmp__ or __eq__.

Trivial example of default comparison:

>>> class C:
...   pass
...
>>> c = C()
>>> d = C()
>>> c==d
False
>>> c==c
True

See http://docs.python.org/ref/customization.html for more details.

Ken


Mr.SpOOn wrote:
Hi,
I have this piece of code:

class Note():
      ...
      ...
     def has_the_same_name(self, note):
         return self == note

     def __str__(self):
         return self.note_name + accidentals[self.accidentals]

     __repr__ = __str__

 if __name__  == '__main__':
     n = Note('B')
     n2 = Note('B')
     print n
     print n2
     print n.has_the_same_name(n2)

I'd expect to get "True", because their string representation is
actually the same, instead the output is:

B
B
False

I think I'm missing something stupid. Where am I wrong?
--
http://mail.python.org/mailman/listinfo/python-list


--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to