Python可以为函数添加新属性,但不能为其他类型添加



我最近注意到我不能给内置类型添加自己的属性。出于某种原因,我可以用函数来做。我不知道为什么python允许我为函数添加新属性,但甚至不允许为方法添加新属性……function不是内置类型还是什么?

>>> def a():
"""This is an a command. It does nothing"""
pass
>>> a.help = a.__doc__
>>> a.help
'This is an a command. It does nothing'
>>> class Klass:
def b():
"""This is a method of Klass class. It does nothing like a."""
pass

>>> obj = Klass()
>>> obj.b.help = obj.b.__doc__
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
obj.b.help = obj.b.__doc__
AttributeError: 'method' object has no attribute 'help'
>>> setattr(obj.b, "help", obj.b.__doc__)
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
setattr(obj.b, "help", obj.b.__doc__)
AttributeError: 'method' object has no attribute 'help'

引用PEP 232,你可以得到一些解释的行为:

不能在绑定或未绑定的方法上设置属性,除非在底层函数对象上显式地这样做。

直接在方法对象上设置属性,如

obj.method.__dict__['name'] = value

cls.method.__dict__['name'] = value

,它会工作。

相关内容

  • 没有找到相关文章

最新更新