我想知道如果任何人都可以解釋,並提供瞭解決這個問題:提前問題與方法的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