Commit 65ea9bd8 authored by Georg Brandl's avatar Georg Brandl

Bug #1684991: explain __special__ lookup semantics.

parent 08898b4b
...@@ -1060,6 +1060,20 @@ raise an exception when no appropriate method is defined. ...@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment