擅长:python、mysql、java
<p>当你在一个类中写一个<code>def</code>,然后在一个实例上调用它,这就是一个方法,当你调用它时,方法调用机制将填充<code>self</code>参数。在</p>
<p>通过在实例中赋值给<code>HasGoodMood</code>,您并不是在那里放置一个新方法,而是将一个函数放入属性中。您可以读取属性来获取函数,然后调用它,尽管这看起来像是一个方法调用,但它只是调用一个碰巧存储在属性中的函数。不会自动提供<code>self</code>参数。在</p>
<p>但是您已经知道<code>self</code>将是什么,因为您将这个函数分配给一个特定的对象。在</p>
<pre><code>greedy_jack.HasGoodMood = (lambda self=greedy_jack: self.Cash > 100)
</code></pre>
<p>这将函数参数<code>self</code>与变量<code>greedy_jack</code>的当前值相关联。在</p>
<p>Python中的Lambdas只能是一行。如果需要更长的函数,可以使用<code>def</code>。在</p>
^{2}$
<p>有关不那么老套的解决方案,请参见<a href="https://stackoverflow.com/a/52293247/3890632">Andrew McDowell's answer</a>。在</p>