0

我想在 Python 中执行某些函数后做一些事情,但我无法更改或调用该函数。有什么想法吗?

例如:

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

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

我想在“有趣”运行后打印一些东西,但我不能更改或调用类 Target

4

2 回答 2

1

也许您只需用包装方法替换原始方法就可以了:

t = Target()

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

t.fun = new_fun
t.fun()

印刷:

目标 123 调用
更有趣

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

于 2012-10-09T08:13:06.527 回答
0
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
于 2012-10-09T08:09:40.367 回答