2011-08-16 8 views
3

管理上の理由から、モジュールxxxへの書き込みアクセス権がないとします。もちろん失敗定義にアクセスできない関数で、どのようにPythonデコレータを使用しますか?

from xxx import yyy 

@myDeco 
yyy 

は、私のような何かをしたいです。

は私が

yyy = myDeco(yyy) 

を行うことができますが、@myDeco」の表記を使用する方法はありますか?それとも、こののみdef

答えて

4

、それは言う:

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番目の方法に戻らなければなりません。

7

@構文は前にのみ許される直前に許可されていると思います。defまたはclass Pythonのリファレンスドキュメント、Compound Statementsセクションで

+2

つまり、2番目のフォームのみを使用できます。 – Keith

関連する問題