管理上の理由から、モジュールxxxへの書き込みアクセス権がないとします。もちろん失敗定義にアクセスできない関数で、どのようにPythonデコレータを使用しますか?
from xxx import yyy
@myDeco
yyy
:
は、私のような何かをしたいです。
は私が
yyy = myDeco(yyy)
を行うことができますが、@myDeco
」の表記を使用する方法はありますか?それとも、こののみdef
?
管理上の理由から、モジュールxxxへの書き込みアクセス権がないとします。もちろん失敗定義にアクセスできない関数で、どのようにPythonデコレータを使用しますか?
from xxx import yyy
@myDeco
yyy
:
は、私のような何かをしたいです。
は私が
yyy = myDeco(yyy)
を行うことができますが、@myDeco
」の表記を使用する方法はありますか?それとも、こののみdef
?
、それは言う:
decorated ::= decorators (classdef | funcdef)
decorators ::= decorator+
decorator ::= "@" dotted_name ["(" [argument_list [","]] ")"] NEWLINE
funcdef ::= "def" funcname "(" [parameter_list] ")" ":" suite
これは構文ルールの一部です。ご覧のとおり、デコレータは関数またはクラスの前にのみ適用されます定義、これはdef <funcname>
の開始点です。
関数の定義には、1つ以上のデコレータ の式で囲むことができます。デコレータ式は、関数定義を含むスコープ内で、関数が の場合に評価されます。
func = decorate_func(func)
が代わりに使用された:彼らはフォームを利用できるようにしてデコレータは本当にただ糖衣構文であることを心に留めておく、と前に、言っ
。だから、あなたが持っているものがある変数の関数オブジェクトであれば、デコレータの構文的な砂糖を使うことはできず、2番目の方法に戻らなければなりません。
@
構文は前にのみ許される直前に許可されていると思います。def
またはclass
Pythonのリファレンスドキュメント、Compound Statementsセクションで
つまり、2番目のフォームのみを使用できます。 – Keith