3

WordPress (PHP) do_action()、apply_filters()、add_action()、add_filter() などの関数を実行する Python でフックを作成する方法はありますか? または、それを行うためのより良いPythonの方法はありますか?

ここでオブザーバー パターンの使用方法の良い例を見つけました: http://en.wikibooks.org/wiki/Computer_Science_Design_Patterns/Observer

4

2 に答える 2

3

おそらく、 Python シグナルが探しているものでしょう。その方法で Observer パターンを確実に実装できます。

編集:シグナルを使用して Python でオブザーバー パターンを実装する例を次に示します。

于 2013-10-25T03:49:14.873 に答える
0

この種の機能は通常、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.
于 2013-10-25T06:43:04.963 に答える