web-dev-qa-db-ja.com

Pythonのアスペクト指向プログラミング(AOP)

可能性のある複製:
Python用のAOPサポートライブラリはありますか?

Java言語のAspectJ拡張機能に精通しています。

Pythonにそのようなことがあるかどうかを知りたいです。

誤解しないでください。私がライブラリを意味するのではなく、AspectJのような言語拡張機能がJavaに対するものです。

25
coredump

Pythonは、アスペクト指向の方法で機能するために「言語拡張」のようなものを必要としません。

これは、Python自体の動的メカニズムによるものです。Google検索ではいくつかのプロジェクトが生成されます。しかし、ライブラリのように見えても、Pythonで必要なのはそれだけです。

私はこれを作り上げていません-それはあなたがクラスとメソッドを内省し、実行時にそれらを変更できるという事実です。アスペクトオリエンテーションについて初めて知ったとき、数時間でPython)にいくつかの概念実証を実装できました。確かに、既存のプロジェクトのいくつかはプロダクション品質のエントリを提供できます。

しかし、あなたが尋ねたので、アスペクトオリエンテーションに使用できる種類のPython "言語拡張"があります:私が上記の概念実証を行ったとき、私は入力パラメーターをチェックするために使用しました実行時にメソッドを呼び出して、特定のメソッドがルールの影響を受けるかどうかを判断します。

Python 3には、関数またはメソッドの入力パラメーターと戻り値に注釈を付けることを可能にする言語のほとんど知られていない機能があります。アスペクト方向ライブラリはこれを利用して、 「ロード時」での魔法であり、各関数呼び出し時ではありません。

ところで、ここでは、純粋なPythonでアスペクト方向を使用する実用的な例を取得するための簡単なハックを示します。すみません-コードのコメントはpt_BRにあります- https://bitbucket.org/jsbueno/metapython/src/f48d6bd388fd/aspect.py

36
jsbueno
4
Aghilas Yakoub