Bug #1684991: explain __special__ lookup semantics.

This commit is contained in:
Georg Brandl 2007-09-05 13:36:27 +00:00
parent 08898b4b19
commit 65ea9bd87e
1 changed files with 14 additions and 0 deletions

View File

@ -1060,6 +1060,20 @@ raise an exception when no appropriate method is defined.
.. XXX above translation is not correct for new-style classes!
Special methods are only guaranteed to work if defined in an object's class, not
in the object's instance dictionary. That explains why this won't work::
>>> class C:
... pass
...
>>> c = C()
>>> c.__len__ = lambda: 5
>>> len(c)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: object of type 'C' has no len()
When implementing a class that emulates any built-in type, it is important that
the emulation only be implemented to the degree that it makes sense for the
object being modelled. For example, some sequences may work well with retrieval