我正在创建一个对象,该对象将代表一些可以在程序外部更改的系统信息。我正在考虑允许我的代码的用户指定回调函数,当检测到更改时将调用该回调函数。这就是我所拥有的,它似乎可以工作(函数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()
我考虑过使用用户提供的装饰器,但我认为这对于用户来说可能不太直观。
这是最好的方法吗?有更好的办法吗?
最佳答案
这里不需要猴子修补,向您的 Testarino
类添加一个 set_callback()
函数会更干净,如下所示:
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()
关于python - 通过猴子修补创建 Python 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9300914/