Roy Smith wrote:
I recently observed in the "checking if a list is empty" thread that a list and a subclass of list can compare equal:

----------------------------
class MyList(list):
    "I'm a subclass"

l1 = []
l2 = MyList()

print type(l1), type(l2)
print type(l1) == type(l2)
print l1 == l2
----------------------------

when run, prints:

<type 'list'> <class '__main__.MyList'>
False
True

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

This part of the documentation is talking about built-in types, which your MyList is not.


[http://docs.python.org/release/2.7/reference/expressions.html#notin]
objects of different types *always* compare unequal

Should probably have the word 'built-in' precede 'types' here, since constructed objects can do whatever they have been told to do.

In the test code above, l1 an l2 are different types, at least in the sense that type() returns something different for each of them.

--> MyList.__mro__
(<class '__main__.MyList'>, <type 'list'>, <type 'object'>)

MyList is a list -- just a more specific kind of list -- as can be seen from its mro; this is analogous to a square (2 sets of parallel lines joined at 90 degree angles, both sets being the same length) also being a rectangle (2 sets of parallel lines joined at 90 degree angles).

What's the intended behavior here?  Either the code is wrong or the docs
> are wrong.

The code is correct.

~Ethan~

PS
Yes, I know my square/rectangle definitions are incomplete, thanks.  ;)
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to