通过猴子修补创建Python回调

时间:2012-02-15 20:35:53

标签: python callback monkeypatching

我正在创建一个对象,它代表一些可以在我的程序之外更改的系统信息。我正考虑允许我的代码的用户指定一个回调函数,当检测到更改时将调用该函数。这就是我所拥有的,它似乎有效(函数doodie将由用户提供)

def doodie(cls):
    print cls.teststr

class Testarino(object):
    def __init__(self):
        self.teststr = 'Yay!'

    def callback(self):
        raise NotImplementedError

    def go(self):
         self.callback(self)

 tester = Testarino()
 tester.callback = doodie

 tester.go()

我考虑过使用用户提供的装饰器,但我认为这对用户来说可能不太直观。

这是最好的方法吗?还有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

此处不需要进行猴子修补,将set_callback()功能添加到Testarino课程会更简洁,如下所示:

def doodie(cls):
    print cls.teststr

class Testarino(object):
    def __init__(self):
        self.teststr = 'Yay!'
        self.callback = None

    def set_callback(self, callback):
        self.callback = callback

    def go(self):
         if self.callback is None:
             raise NotImplementedError
         self.callback(self)

tester = Testarino()
tester.set_callback(doodie)

tester.go()