有没有办法在 Python 中创建运行 WordPress (PHP) do_action()、apply_filters()、add_action() 或 add_filter() 等函数的钩子?还是有更好的 Python 方法来做到这一点?
我在这里找到了一个关于如何使用观察者模式的好例子: http ://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Observer
有没有办法在 Python 中创建运行 WordPress (PHP) do_action()、apply_filters()、add_action() 或 add_filter() 等函数的钩子?还是有更好的 Python 方法来做到这一点?
我在这里找到了一个关于如何使用观察者模式的好例子: http ://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Observer
也许Python 信号是您正在寻找的。你当然可以这样实现观察者模式。
这种功能在 Python 社区中通常称为 Signals 或 Single dispatcher。
信号在现代 Python 项目/库中被广泛使用以减少耦合,但 Python 标准中没有实现(信号模块只能捕获一些 os 信号,它不是为一般用途而设计的)。因此不同的项目可能会实现自己的信号系统(例如 PyQt)或使用第三方信号/单一调度程序库(例如 Flask、Django)。如果您使用的是 Python 框架,那么该框架很可能已经有一个信号系统。
今天的人们通常使用 PyDispatcher(Django 使用)或Blinker ( Flask 使用)。它们都具有很高的代码质量和良好的文档。我个人更喜欢Blinker。
闪光灯示例:
def subscriber(sender):
print("Got a signal sent by %r" % sender)
ready = signal('ready')
ready.connect(subscriber)
class Processor:
def __init__(self, name):
self.name = name
def go(self):
ready = signal('ready')
ready.send(self)
print("Processing.")
complete = signal('complete')
complete.send(self)
def __repr__(self):
return '<Processor %s>' % self.name
processor_a = Processor('a')
processor_a.go()
输出:
Got a signal sent by <Processor a>
Processing.