擅长:python、mysql、java
<p>当您创建一个可调用的返回另一个可调用的时,函数方法更简单、更便宜。主要有两个区别:</p>
<ol>
<li>函数方法自动与方法一起工作,而如果使用类方法,则必须读取描述符并定义<code>__get__</code>方法。</li>
<li>类方法使状态保持更容易。您可以使用闭包,特别是在Python 3中,但通常首选类方法来保持状态。</li>
</ol>
<p>此外,函数方法允许您在修改或存储后返回<em>原始</em>函数。</p>
<p>然而,decorator可以返回可调用的以外的内容,或者返回比可调用的更多的<em>内容。有了一个类,您可以:</p>
<ol>
<li>向修饰的可调用对象添加方法和属性,或对其实现操作(uh-oh)。</li>
<li>创建在类中以特殊方式工作的描述符(例如<code>classmethod</code>,<code>property</code>)</li>
<li>使用继承实现相似但不同的装饰器。</li>
</ol>
<p>如果您有任何疑问,请扪心自问:您是否希望您的装饰器返回一个函数,该函数的行为与该函数的行为完全相同?使用返回函数的函数。您希望您的装饰器返回一个自定义对象,该对象执行的操作比函数执行的操作更多还是不同?创建一个类并将其用作装饰器。</p>