我正在创建一个对象,它代表一些可以在我的程序之外更改的系统信息。我正考虑允许我的代码的用户指定一个回调函数,当检测到更改时将调用该函数。这就是我所拥有的,它似乎有效(函数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()
我考虑过使用用户提供的装饰器,但我认为这对用户来说可能不太直观。
这是最好的方法吗?还有更好的方法吗?
答案 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()