Bug #1684991: explain __special__ lookup semantics.
This commit is contained in:
parent
08898b4b19
commit
65ea9bd87e
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue