Weirdness comparing strings

Ken Seehart ken at seehart.com
Tue Sep 30 06:55:32 EDT 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:
...   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
>
>   




More information about the Python-list mailing list