web-dev-qa-db-ja.com

Python-すべての組み込みデコレータは何ですか?

知っている@staticmethod@classmethod@property、ただし散在するドキュメントを通じてのみ。 Pythonに組み込まれているすべての関数デコレータは何ですか?それはドキュメントにありますか?どこかに維持されている最新のリストはありますか?

60
ryeguy

そうは思いません。デコレータは通常の関数と違いはなく、より洗練された方法で呼び出すだけです。

それらすべてを見つけるには、 組み込みの関数 リストを検索してみてください。 Python用語集 デコレータ構文は構文糖衣です。次の2つの定義は同等の関数を作成します(この例は用語集からコピーされています)。

def f(...):
    ...
f = staticmethod(f)

@staticmethod
def f(...):

したがって、別の関数を返す組み込み関数は、デコレーターとして使用できます。質問です-そのように使用することは理にかなっていますか? :-)

functools モジュールには、デコレーターとして使用できるいくつかの関数が含まれていますが、これらは要求された組み込み関数ではありません。

35
Abgan

これらは組み込みではありませんが、サンプルデコレータの this library は非常に優れています。

Abgan says のように、組み込み関数リストはおそらく見るのに最適な場所です。ただし、デコレータはクラスとしても実装できるため、包括的であるとは限りません。

15
James Brady

関数を返すためにデコレータは必要ありません。 @atexit.register 前。

1
habnabit