我想知道如果任何人都可以解释,并提供了解决这个问题:提前问题与方法的monkeypatching和引用
$ cat object-override-methods.py
class A:
def foo(self):
return 1
class B:
def foo(self):
return 1
for klass in A, B:
orig_foo = klass.foo
def foo(self):
return orig_foo(self) * 2
klass.foo = foo
A().foo()
B().foo()
$ python object-override-methods.py
Traceback (most recent call last):
File "object-override-methods.py", line 15, in <module>
A().foo()
File "object-override-methods.py", line 12, in foo
return orig_foo(self) * 2
TypeError: unbound method foo() must be called with B instance as first argument (got A instance instead)
感谢。
的解释会有所帮助;只是发布没有上下文的代码并不鼓励人们帮忙。 –
我的回答大部分看起来像RichieHindle的,所以我没有打扰,但对于它的价值,猴子修补==不好 –
理想情况下,API不会在两个不同的类中定义两个相同的方法。有时候糟糕的设计使得设计更加糟糕:) – Ben