Weirdness comparing strings
ken at seehart.com
Tue Sep 30 12:55:32 CEST 2008
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:
>>> c = C()
>>> d = C()
See http://docs.python.org/ref/customization.html for more details.
> 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:
> I think I'm missing something stupid. Where am I wrong?
More information about the Python-list