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! .. 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 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 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 object being modelled. For example, some sequences may work well with retrieval