擅长:python、mysql、java
<p>您唯一的问题是您没有正确定义<code>foo</code>。它需要为调用它的实例提供一个显式参数。在</p>
<pre><code>class A(object):
def __init__(self)
self.x = 2
def foo(self):
print(self.x)
def foo(this):
print(this.x + 3)
A.foo = foo
a = A()
a.foo() # outputs 5 in Python 2 and Python 3
</code></pre>
<hr/>
<p>从一个非常真实的意义上讲,monkey-patching首先就是类的创建方式。<code>class</code>语句几乎只是以下代码的语法糖分:</p>
^{pr2}$
<p>把<code>type</code>的定义想象成类似于</p>
<pre><code>def type(name, bases, d):
new_class = magic_function_to_make_a_class()
new_class.name = name
new_class.bases = bases
for k, v in d.items():
setattr(new_class, k, v)
return new_class
</code></pre>