您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python真的为每个新实例创建了所有绑定方法吗?

Python真的为每个新实例创建了所有绑定方法吗?

每次访问一种方法时,方法都是 按需 绑定的。

访问函数名称调用描述符协议,该协议函数对象上返回绑定方法

绑定方法是围绕功能对象的薄包装器。它存储了对原始函数和实例的引用。调用方法对象时,它依次将调用传递给函数,并插入实例作为第一个参数。

创建实例时不会创建方法,因此不需要先验的额外内存。

您可以手动重新创建步骤:

>>> class A:
...     def __init__(self, name):
...         self.name = name
...     def foo(self):
...         print(self.name)
... 
>>> a = A('One')
>>> a.foo
<bound method A.foo of <__main__.A object at 0x100a27978>>
>>> a.foo.__self__
<__main__.A object at 0x100a27978>
>>> a.foo.__func__
<function A.foo at 0x100a22598>
>>> A.__dict__['foo']
<function A.foo at 0x100a22598>
>>> A.__dict__['foo'].__get__(a, A)
<bound method A.foo of <__main__.A object at 0x100a27978>>
>>> A.__dict__['foo'].__get__(a, A)()
One

每次都只重新创建方法对象。基本功能保持稳定:

>>> a.foo is a.foo
False
>>> b = A('Two')
>>> b.foo is a.foo
False
>>> b.foo.__func__ is a.foo.__func__
True

这种架构也使得classmethodstaticmethodproperty对象。您可以创建自己的描述符,创建大量有趣的绑定行为。

python 2022/1/1 18:39:57 有276人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶