61

Python デコレータは、Java アノテーションや Spring AOP や Aspect J のようなものと同じですか、似ていますか、それとも根本的に異なりますか?

4

4 に答える 4

71

Python デコレーターは、関数を別の関数に渡し、最初の関数を結果で置き換えるための単なる構文糖衣です。

@decorator
def function():
    pass

のシンタックスシュガーです

def function():
    pass
function = decorator(function)

Java アノテーション自体はメタデータを格納するだけなので、動作を追加するにはそれらを検査するものが必要です。

 

Java AOP システムは、Java の上に構築された巨大なものであり、デコレーターは、セマンティクスがほとんどまたはまったく付加されていない単なる言語構文であるため、それらを実際に比較することはできません。

于 2013-03-11T19:46:32.423 に答える