擅长:python、mysql、java
<p>让我们:</p>
<pre><code>class A(object): pass
class B(object):
def b(self):
print 'self class: ' + self.__class__.__name__
</code></pre>
<p>当您执行以下操作时:</p>
^{pr2}$
<p>不是将<em>函数</em>附加到a,而是将<em>未绑定方法附加到</em>。因此python只将其作为标准属性添加,而不将其转换为a无界方法。解决方案很简单,附加底层函数:</p>
<pre><code>A.b = B.b.__func__
print A.b
# print: <unbound method A.b>
a = A()
a.b()
# print: self class: A
</code></pre>
<p>我不知道未绑定方法和函数之间的所有区别(只知道第一个包含第二个),也不知道它们在内部是如何工作的。所以我无法解释原因。我的理解是方法对象(绑定与否)比函数需要更多的信息和功能,但它需要一个来执行。在</p>
<p>我同意自动化(更改未绑定方法的类)可能是一个不错的选择,但我可以找到不这样做的理由。因此,Python3与Python2的区别令人惊讶。我想找出这个选择的原因。在</p>