#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
attributes. However, since method attributes are actually stored on the
underlying function object (``meth.__func__``), setting method attributes on
bound methods is disallowed. Attempting to set a method attribute results in a
:exc:`TypeError` being raised. In order to set a method attribute, you need to
explicitly set it on the underlying function object::
bound methods is disallowed. Attempting to set an attribute on a method
results in an :exc:`AttributeError` being raised. In order to set a method
attribute, you need to explicitly set it on the underlying function object::
class C:
def method(self):
pass
c = C()
c.method.__func__.whoami = 'my name is c'
>>> class C:
... def method(self):
... pass
...
>>> c = 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.