WordPress (PHP) do_action()、apply_filters()、add_action()、add_filter() などの関数を実行する Python でフックを作成する方法はありますか? または、それを行うためのより良いPythonの方法はありますか?
ここでオブザーバー パターンの使用方法の良い例を見つけました: http://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Observer
WordPress (PHP) do_action()、apply_filters()、add_action()、add_filter() などの関数を実行する Python でフックを作成する方法はありますか? または、それを行うためのより良いPythonの方法はありますか?
ここでオブザーバー パターンの使用方法の良い例を見つけました: http://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Observer
おそらく、 Python シグナルが探しているものでしょう。その方法で Observer パターンを確実に実装できます。
編集:シグナルを使用して Python でオブザーバー パターンを実装する例を次に示します。
この種の機能は通常、Python コミュニティでは Signals または Single Dispatcher と呼ばれます。
シグナルは、結合を減らすために最新の Python プロジェクト/ライブラリで広く使用されていますが、Python 標準には実装がありません (シグナル モジュールは一部の OS シグナルのみをキャッチでき、一般的な使用向けには設計されていません)。そのため、さまざまなプロジェクトが独自のシグナル システム (PyQt など) を実装するか、サードパーティのシグナル/単一ディスパッチャー ライブラリ (Flask、Django など) を使用する場合があります。Python フレームワークを使用している場合は、フレームワークに既にシグナル システムがある可能性があります。
今日の人々は通常、 PyDispatcher (Django で使用) またはBlinker (Flask で使用) を使用します。どちらも高いコード品質と優れたドキュメントを備えています。個人的にはブリンカーの方が好きです。
ウインカーの例:
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.