擅长:python、mysql、java
<p><strong>编辑</strong>:我又撒谎了。函数的<code>__?attr__</code>属性是只读的,但显然在赋值时并不总是抛出<code>AttributeException</code>异常?我不知道。回到原点!在</p>
<p><strong>Edit</strong>:这并不能真正解决问题,因为包装函数不会将属性请求代理到<code>InstanceMethodWrapper</code>。当然,我可以在decorator中对<code>__?attr__</code>属性进行打孔——这就是我现在所做的——但这很难看。更好的主意是非常受欢迎的。在</p>
<hr/>
<p>当然,我马上意识到,将一个简单的decorator与我们的类结合起来就可以做到:</p>
<pre><code>def methodize(method, callable):
"Circumvents the fact that callables are not converted to instance methods."
@wraps(method)
def wrapper(*args, **kw):
return wrapper._callable(*args, **kw)
wrapper._callable = callable
return wrapper
</code></pre>
<p>然后将decorator添加到元类中对<code>InstanceMethodWrapper</code>的调用:</p>
^{pr2}$
<p>噗。有点不对劲,但很管用。在</p>