On May 12, 2011, at 11:30 AM, Eric Snow wrote:

> On Thu, May 12, 2011 at 6:23 AM, Roy Smith <r...@panix.com> wrote:
> The docs say:
> 
> [http://docs.python.org/library/stdtypes.html]
> Objects of different types, except different numeric types and different
> string types, never compare equal
> 
> [http://docs.python.org/release/2.7/reference/expressions.html#notin]
> objects of different types (emphasis)always compare unequal
> 
> 
> That definitely makes it unclear.

I don't think it's unclear at all.  It's very clear.  Clearly wrong :-)

> A little further down it says that you can customize comparison with the 
> __cmp__ special method.

Yes, and that says:

The operators <, >, ==, >=, <=, and != compare the values of two objects. The 
objects need not have the same type. If both are numbers, they are converted to 
a common type. Otherwise, objects of different types always compare unequal, 
and are ordered consistently but arbitrarily. You can control comparison 
behavior of objects of non-built-in types by defining a __cmp__ method or rich 
comparison methods like __gt__, described in section Special method names.

I read that as saying that if you implement __eq__(), you must make sure that 
it returns False if self and other have different types (and likewise, __ne__() 
should return True for that case).  The same way that it says that 
obj1.__lt__(obj2) must return a consistent result for all types of obj1 and 
obj2.

> Looking over the documentation, it seems like it could be touched up to 
> alleviate any confusion.  Perhaps rewording to make it clear that the 
> described behavior is the default for objects, rather than always the case.

That would be a start, but doesn't address this specific problem.  If the docs 
are changed to say that "type(obj1) != type(obj2) implies obj1 != obj2" in only 
the default, people will assume that list follows this default rule since it's 
a built-in type.  Built-in types which don't follow the default rule need to 
have their behavior documented.

---
Roy Smith
r...@panix.com





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

Reply via email to