Ich möchte diese (Dummy-Beispiel) tun:Wie Zugriff auf nonlocal Bereich innerhalb der Klassendefinition in Python?
def func():
nonlocal var
print (var)
class A:
var = 'hola'
func()
Aber ich bekomme: „Syntaxerror: keine Bindung für nicht-lokale‚var‘gefunden“
Was will ich wirklich, ist ein Methodennamen anhängen zu einer Liste im Bereich der Klasse, wenn diese Methode eingerichtet ist. Etwas wie dieses:
def decorator(func):
nonlocal decorated
decorated.append(func.__name__)
return func
class A:
decorated = []
@decorate
def f(self):
pass
'nonlocal' sucht im Gültigkeitsbereich der Funktionsdefinition, nicht den Funktionsaufruf. Es gibt Möglichkeiten, in den Bereich des Funktionsaufrufs zu schauen, aber es wird im Allgemeinen empfohlen, sie zu vermeiden, wenn es Ihnen möglich ist. Versuchen Sie, dem Dekorator die Liste als Argument zu geben, oder verwenden Sie einen Klassendekorator, um die Klasse nachzubearbeiten und die "dekorierte" Liste einzurichten. – user2357112