【发布时间】:2010-02-21 22:11:43
【问题描述】:
>>> class A(object): pass
>>> def func(cls): pass
>>> A.func = func
>>> A.func
<unbound method A.func>
这个赋值如何创建一个方法?分配对类执行以下操作似乎不直观:
- 将函数转换为未绑定的实例方法
- 将
classmethod()中包装的函数转换为类方法(实际上,这很直观) - 将
staticmethod()中包装的函数转换为函数
似乎第一个应该有instancemethod(),而最后一个应该根本没有包装函数。我知道这些是在 class 块内使用的,但为什么要在它之外应用呢?
但更重要的是,将函数分配到类中究竟是如何工作的?发生了什么神奇的事情可以解决这三件事?
对此更令人困惑:
>>> A.func
<unbound method A.func>
>>> A.__dict__['func']
<function func at 0x...>
但我认为这与描述符有关,当 检索 属性时。我认为这与这里的属性设置没有太大关系。
【问题讨论】:
-
您忘记了实例方法只是实例变量,其中包含一个函数,该函数的第一个参数是实例本身。
-
什么是实例变量?!
标签: python class-method