擅长:python、mysql、java
<p>Decorators在函数定义时应用。对于大多数函数,这是在加载模块时进行的。(在其他函数中定义的函数在每次调用封闭函数时都会应用decorator。)</p>
<p>所以,如果你想给装饰工打补丁,你需要做的是:</p>
<ol>
<li>导入包含它的模块</li>
<li>定义mock decorator函数</li>
<li>设置<em>例如</em><code>module.decorator = mymockdecorator</code></li>
<li>导入使用decorator的模块,或在自己的模块中使用它</li>
</ol>
<p>如果包含decorator的模块也包含使用它的函数,那么当您看到它们时,它们已经被修饰了,您可能是S.O.L</p>
<p>编辑以反映对Python的更改,因为我最初编写了这篇文章:如果decorator使用<code>functools.wraps()</code>,并且Python的版本足够新,那么您可以使用<code>__wrapped__</code>属性挖掘原始函数并重新装饰它,但这并不能保证,而且您要替换的decorator也可能不是应用的唯一decorator。</p>