31

Python プログラミングで AOP を使用しようとしていますが、存在するさまざまなライブラリの経験がありません。

だから私の質問は:

Python にはどのような AOP サポートがありますか? そして、それらの間の異なるライブラリの利点は何ですか?


編集

いくつか見つけましたが、それらがどのように比較されるかわかりません:

編集 2

どのコンテキストでこれらを使用しますか?

私は Python で書かれた 2 つのアプリケーションを持っています。これらのアプリケーションには通常、税金やその他のお金を計算するメソッドがあります。機能の「スケルトン」を記述し、実行時にカスタマイズできるようにしたいと考えています。フルスタック。

4

6 に答える 6

24

いくつかの優れた例については、Python デコレーターに関する S.Lott のリンクを参照し、デコレーターの定義 PEP を参照してください。

Python には最初から AOP がありましたが、印象的な名前がありませんでした。Python 2.4 では、decorator 構文が追加されました。これにより、decorator を構文的に非常にうまく適用できます。

ルールに基づいてデコレータを適用したい場合は、ライブラリが必要になるかもしれませんが、宣言するときに関連する関数/メソッドをマークしたい場合は、おそらく必要ありません。

単純なキャッシュ デコレータの例を次に示します (この質問のために書きました)。

import pickle, functools
def cache(f):
  _cache = {}
  def wrapper(*args, **kwargs):
    key = pickle.dumps((args, kwargs))
    if key not in _cache:
      _cache[key] = f(*args, **kwargs) # call the wrapped function, save in cache
    return _cache[key] # read value from cache
  functools.update_wrapper(wrapper, f) # update wrapper's metadata
  return wrapper

import time
@cache
def foo(n):
  time.sleep(2)
  return n*2

foo(10) # first call with parameter 10, sleeps
foo(10) # returns immediately
于 2008-11-13T17:39:10.000 に答える
7

編集:私はもはや putilities を維持しておらず、何年も維持されていません。代わりに他の回答のいずれか、またはウィキペディアのこのリストを検討することをお勧めします。

Python 用の別の AOP ライブラリはpytilities( Documentation ; svn repo ) です。それは現在最も強力です(私が知る限り)。

その機能は次のとおりです。

  • 再利用可能な Aspect クラスを作成する
  • インスタンスまたはクラスに複数の側面を適用する
  • インスタンス/クラスへのアスペクトの適用を解除する
  • アスペクトを使用してインスタンスに新しい属性を追加する
  • インスタンス/クラスのすべての属性にアドバイスを適用します
  • ...

また、いくつかの特別な記述子などの他の機能もあります (ドキュメントを参照してください)。

于 2011-03-07T13:48:30.660 に答える
6

Python では、アスペクト指向プログラミングは通常、実行時にクラスとインスタンスを動的に変更することで構成されます。これは、一般にモンキーパッチと呼ばれます。AOP に関する別の質問への回答として、Python での AOP のユース ケースのいくつかをまとめました。

于 2008-11-13T14:11:06.767 に答える
4

注釈の使用は実際には AOP ではありません。これは、ウィービング プロセスが多少ハードコーディングされているためです。

Python にはいくつかの AOP フレームワークがあります (そのうちの 8 つを数えて比較しましたAspyctが、明らかに勝者でした)。

次の会議のいずれかで、実際の業界での使用例を含む調査結果をまとめた論文を公開する予定です。

于 2010-05-21T19:08:59.983 に答える
3

BSD ライセンスのpython-aspectlib はどうですか?

実施状況

関数、メソッド、インスタンス、クラスの織り込みが完了しました。

于 2015-12-15T10:59:24.960 に答える
2

Python Decorator Libraryから始めます。その多くは AOP のようなものです。

于 2008-11-13T14:05:33.283 に答える