我正在考虑修改某些第三方Python代码的行为。有许多类派生自基类,为了轻松实现我的目标,最简单的方法就是覆盖用于派生所有其他类的基类。有没有一个简单的方法来做到这一点,而无需触及任何第三方代码?如果我没有清楚地解释这个:
class Base(object):
'...'
class One(Base)
'...'
class Two(Base)
'...'
...我希望在没有实际修改上述代码的情况下对Base
进行修改。也许是这样的事情:
# ...code to modify Base somehow...
import third_party_code
# ...my own code
Python可能有一些可爱的内置解决方案来解决这个问题,但我还没有意识到这一点。
答案 0 :(得分:6)
也许您可以将方法修补为Base
?
#---- This is the third-party module ----#
class Base(object):
def foo(self):
print 'original foo'
class One(Base):
def bar(self):
self.foo()
class Two(Base):
def bar(self):
self.foo()
#---- This is your module ----#
# Test the original
One().bar()
Two().bar()
# Monkey-patch and test
def Base_foo(self):
print 'monkey-patched foo'
Base.foo = Base_foo
One().bar()
Two().bar()
打印出来
original foo
original foo
monkey-patched foo
monkey-patched foo