擅长:python、mysql、java
<p><code>profile</code>函数本身就是一个装饰器,与大多数装饰器一样,它们只需要应用于函数。在</p>
<p>幸运的是,类方法基本上是在创建实例时绑定到实例的函数。因此,您可以将decorator应用于任何类方法,方法是将其放入类定义中:</p>
<pre><code>class myApp(object):
@do_profile(DO_PROFILE)
def foo_method(self, arg1):
pass
@do_profile(DO_PROFILE)
def bar_method(self, arg2):
pass
</code></pre>
<p>如果使用Python2.6或更高版本,还可以创建一个<a href="http://www.python.org/dev/peps/pep-3129/" rel="nofollow">class decorator</a>并将<code>profile</code>修饰符应用于任何给定类的<em>所有</em>方法。您可以通过将decorator放在类定义之前来应用它:</p>
^{pr2}$
<p>这样的装饰师可能看起来像这样:</p>
<pre><code>import types
def do_profile_all_methods(cond):
if not cond:
return lambda c: c # Do nothing with the class; the 'null' decorator
def profile_all_methods(klass):
for name, attr in klass.__dict__.items():
if isinstance(attr, types.UnboundMethodType):
klass[name] = profile(attr)
return klass
return profile_all_methods
</code></pre>
<p>此修饰符只将<code>profile</code>包装应用于直接方法,而不是从基类继承的任何方法。在</p>