擅长:python、mysql、java
<p>我通过改变操作实例化对象而不是类本身来修复它。你知道吗</p>
<p>如果将我的资源包装器更改为<code>for attr in dir(cls):</code>,我将<code>cls</code>传递给<code>self</code>函数包装器。你知道吗</p>
<p>为清楚起见,这是示例代码的最终结果:</p>
<p><strong>用户资源.py:</strong></p>
<pre><code>class UserResource(object):
def test(self):
pass
</code></pre>
<p><strong>资源.py:</strong></p>
<pre><code>def resource_wrapper(resource_class):
def decorate(cls):
for attr in dir(cls):
if callable(getattr(cls, attr)) and not attr.startswith('_'):
setattr(cls, attr, _function_wrapper(cls, getattr(cls, attr)))
return cls
return decorate(resource_class)
def _function_wrapper(cls, fn):
from functools import wraps
@wraps(fn)
def wrapper(*args, **kwargs):
self = cls
arg = kwargs.pop('test', False)
print arg # See output further down
return fn(*args, **kwargs)
return wrapper
</code></pre>
<p><strong>用法:</strong></p>
<pre><code>r1 = resource_wrapper(UserResource())
r1.test(test=True)
# True
</code></pre>