监视Python函数

时间:2012-10-09 08:01:00

标签: python

我希望在Python中使用某个函数exec后执行某些操作,但我无法更改或调用该函数。有一些想法吗?

例如:

class Target(object):
  def __init__(self):
    self.__id = 123

  def fun(self):
    print "called by target %d" % self.__id

我希望在“有趣”运行后打印一些内容,但我无法更改或调用类目标

2 个答案:

答案 0 :(得分:1)

也许你可以用包装器方法替换原始方法:

t = Target()

old_fun = t.fun
def new_fun():
    old_fun()
    print "even more fun"

t.fun = new_fun
t.fun()

打印:

  

目标123鸣叫   更有趣

请注意,这不会更改类,只会更改实例。

答案 1 :(得分:0)

class MyTarget(Target):
    def fun(self):
        super(MyTarget, self).fun()
        # your custom post processing

编辑:由于控制对象创建不是一种选择,您可以考虑使用Mr. Steak的答案。如果您希望后期处理影响Target的所有实例,您可以使用以下内容:

Target.old_fun = Target.fun
def new_fun(self):
    self.old_fun()
    # custom post-processing
Target.fun = new_fun