gpt4 book ai didi

python - pep 232 是否也适用于实例方法?

转载 作者:行者123 更新时间:2023-11-28 22:49:50 26 4
gpt4 key购买 nike

我很好奇 PEP 232 (函数的属性)也适用于类方法。最后,我认为它没有或者我做错了什么?

Python 2.7.6 (default, Feb 26 2014, 12:07:17) 
[GCC 4.8.2 20140206 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class Foo(object):
... def a(self):
... print(self.a.bar)
...
>>> f = Foo()
>>> f.a.bar = "bar"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'instancemethod' object has no attribute 'bar'

最佳答案

实际上,实例方法只是函数的包装器。函数成为方法只是因为是 descriptors .

您始终可以访问底层函数:

f.a.__func__.bar = 'bar'

instancemethod.__func__ 属性是底层函数对象。

设置后,方法包装器代理属性,您不能直接在包装器上设置它们:

>>> f.a.__func__.bar = 'bar'
>>> f.a.bar
'bar'
>>> f.a()
bar

在 Python 2 中,您还可以使用 instancemethod.im_func,但为了与 Python 3 向前兼容,建议您坚持使用 __func__

这在 User-defined methods section of the Python data model 中有明确记录:

Methods also support accessing (but not setting) the arbitrary function attributes on the underlying function object.

关于python - pep 232 是否也适用于实例方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23345005/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com