#16440: merge with 3.3.

This commit is contained in:
Ezio Melotti 2012-11-09 01:09:27 +02:00
commit dc945e4943
1 changed files with 15 additions and 9 deletions

View File

@ -3343,16 +3343,22 @@ arg-n)``.
Like function objects, bound method objects support getting arbitrary Like function objects, bound method objects support getting arbitrary
attributes. However, since method attributes are actually stored on the attributes. However, since method attributes are actually stored on the
underlying function object (``meth.__func__``), setting method attributes on underlying function object (``meth.__func__``), setting method attributes on
bound methods is disallowed. Attempting to set a method attribute results in a bound methods is disallowed. Attempting to set an attribute on a method
:exc:`TypeError` being raised. In order to set a method attribute, you need to results in an :exc:`AttributeError` being raised. In order to set a method
explicitly set it on the underlying function object:: attribute, you need to explicitly set it on the underlying function object::
class C: >>> class C:
def method(self): ... def method(self):
pass ... pass
...
c = C() >>> c = C()
c.method.__func__.whoami = 'my name is c' >>> c.method.whoami = 'my name is method' # can't set on the method
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'method' object has no attribute 'whoami'
>>> c.method.__func__.whoami = 'my name is method'
>>> c.method.whoami
'my name is method'
See :ref:`types` for more information. See :ref:`types` for more information.