python - 通过猴子修补创建 Python 回调

标签 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()

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

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

最佳答案

这里不需要猴子修补,向您的 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/

相关文章:

python - 创建一个没有重复项的字典

c++ - 链接问题,C++ 成员函数到 C 回调

javascript - Node : Traversing directories in a recursion

perl - 如何在 Perl 中访问monkeypatched 方法的原始方法?

python - 如何猴子补丁Django?

python - 如何以下拉方式显示所有员工用户列表?

python - 日志记录级别为信息,但仅显示警告。 Python 日志记录

python - 无法在 Django 3 中导入测试模块

node.js - 如何减少 NodeJS/Mongoose 中的代码重复

python - 你能用闭包修补*只是*一个嵌套函数,还是必须重复整个外部函数?