<p>[虽然这一点在史蒂芬·伦巴尔斯基的评论中得到了回答,他指出了两个独立的问题,但我在这里添加了一个简短的综合答案。]</p>
<p>是的,你是对的,这并没有正确定义一个方法。在</p>
<pre><code>>>> class C:
... pass
...
>>> p = C()
>>> p.name = 'nickie'
>>> p.get_name = lambda self: 'Dr. {}'.format(self.name)
>>> p.get_name()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: <lambda>() takes exactly 1 argument (0 given)
</code></pre>
<p>下面是如何调用存储在对象<code>p</code>的属性<code>get_name</code>中的<strong>函数</strong>:</p>
^{pr2}$
<p>为了正确地动态定义<strong>实例方法</strong>,请看一看<a href="https://stackoverflow.com/questions/972/adding-a-method-to-an-existing-object-instance">relevant question</a>的答案。在</p>
<p>如果要动态定义<strong>类方法</strong>,则必须将其定义为:</p>
<pre><code>>>> C.get_name = lambda self: 'Dr. {}'.format(self.name)
</code></pre>
<p>尽管该方法将被添加到现有对象中,但这对<code>p</code>(因为它已经有自己的属性<code>get_name</code>)无效。但是,对于新对象:</p>
^{4}$
<p>而且(显然),对于没有<code>name</code>属性的对象,该方法将失败:</p>
<pre><code>>>> r = C()
>>> r.get_name()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
AttributeError: C instance has no attribute 'name'
</code></pre>