<p>我希望我能理解你在这里想做什么。这在python3中是可行的:</p>
<pre><code>class A():
def foo():
print('2')
def foo():
A.foo = lambda: print('5')
A.foo() # Print '2'
foo() # Assign the new method
A.foo() # Prints '5'
</code></pre>
<p>但是在python2中有几个注意事项。在</p>
<ul>
<li><p><code>print</code>不是Python3中的方法(请参见此处:<a href="https://stackoverflow.com/questions/2970858/why-doesnt-print-work-in-a-lambda">Why doesn't print work in a lambda?</a>)</p></li>
<li><p>您不能只调用未绑定的消息(请参见此处:<a href="https://stackoverflow.com/questions/784331/in-python-can-you-call-an-instance-method-of-class-a-but-pass-in-an-instance-o?noredirect=1&lq=1">In Python, can you call an instance method of class A, but pass in an instance of class B?</a>)</p></li>
</ul>
<p>所以你必须这样做:</p>
^{pr2}$
<p><strong>编辑:</strong>
在看到你在评论中的问题后,我想你其实想要一些不同的东西。这是:</p>
<pre><code>class A():
def foo(self):
print '2'
def foo(self):
print '5'
a = A()
a.foo() # Print '2'
A.foo = foo # Assign the new method
a.foo() # Prints '5'
</code></pre>
<p>这在python2中工作得很好。在</p>
<p><code>self</code>是对方法绑定到的当前实例的引用。当您只是调用诸如<code>print</code>之类的访问附加到该实例的任何属性或方法的东西时,不使用它。但对于不同的情况,请看以下示例:</p>
<pre><code>class A():
msg = "Some message"
def foo(self):
print self.msg
def bar(self):
self.msg = "Some other message"
a = A()
a.foo() # Print old msg
A.bar = bar # Assign the new method
a.bar() # Assigns new message
a.foo() # Prints new message
</code></pre>
<p>同样正如切普纳在其帖子下的评论中指出的:</p>
<blockquote>
<p>The name self isn't special; it's just a convention. You could use
this if you really wanted to, and it doesn't need to be the same name
in both functions defined here. What is important is that the first
argument to a function used as an instance method will be a reference
to the calling object. a.foo() is almost exactly the same as A.foo(a)</p>
</blockquote>