>>> 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...>
但我认为在检索属性时,这与描述符有关。我认为这与这里的属性设置没有太大关系。