私はこの(ダミーの例を)やりたい:Pythonでクラス定義内の非ローカルスコープにアクセスするには?
def func():
nonlocal var
print (var)
class A:
var = 'hola'
func()
しかし、私が手:私は本当にするつもり何
は、メソッド名を追加している:「にSyntaxErrorなし非ローカル 『VAR』の結合が見つかりました」そのメソッドが装飾されている場合は、クラスのスコープ内のリストに追加します。このようなもの:
def decorator(func):
nonlocal decorated
decorated.append(func.__name__)
return func
class A:
decorated = []
@decorate
def f(self):
pass
'nonlocal'は、関数呼び出しではなく関数定義の範囲内にあります。関数呼び出しの範囲を調べる方法はありますが、可能であれば、それらを避けることが一般的に推奨されています。デコレータにリストを引数として渡すか、クラスデコレータを使ってクラスを後処理し、 'decorated'リストを設定してみてください。 – user2357112