我想在 Python 中执行某些函数后做一些事情,但我无法更改或调用该函数。有什么想法吗?
例如:
class Target(object):
def __init__(self):
self.__id = 123
def fun(self):
print "called by target %d" % self.__id
我想在“有趣”运行后打印一些东西,但我不能更改或调用类 Target
我想在 Python 中执行某些函数后做一些事情,但我无法更改或调用该函数。有什么想法吗?
例如:
class Target(object):
def __init__(self):
self.__id = 123
def fun(self):
print "called by target %d" % self.__id
我想在“有趣”运行后打印一些东西,但我不能更改或调用类 Target
也许您只需用包装方法替换原始方法就可以了:
t = Target()
old_fun = t.fun
def new_fun():
old_fun()
print "even more fun"
t.fun = new_fun
t.fun()
印刷:
目标 123 调用
更有趣
请注意,这不会更改类,而只会更改实例。
class MyTarget(Target):
def fun(self):
super(MyTarget, self).fun()
# your custom post processing
编辑:由于控制对象创建不是一种选择,您可以考虑使用 Steak 先生答案的变体。如果您希望后处理影响 的所有实例Target
,您可以使用如下内容:
Target.old_fun = Target.fun
def new_fun(self):
self.old_fun()
# custom post-processing
Target.fun = new_fun