У меня есть метод, который устанавливает переменную name
, но не существует global name
в первой строке, она использует локальную переменную name
, поэтому она никогда не изменяет глобальную переменную name
. Есть ли способ, чтобы украсить set_name
заставить его использовать глобальные name
?Изменить область локальной переменной декораторами?
name = "John"
def set_name():
name = "Sara"
def print_name():
global name
print(name)
def decorator(func):
def wrapper(*args, **kwargs):
## Problem:
# Force set_name to use global 'name'
func(*args, **kwargs)
return wrapper
print_name()
#Output: John
decorator(set_name)()
print_name()
# Prints John, but I want to prints Sara
Может быть, есть какое-то глубокая магия Python, чтобы сделать это, но короткий ответ - нет. Декораторы не меняют функцию, которую они обертывают. –
Я не думаю, что вы можете это сделать ... tbh Мне нелегко видеть, почему вы хотели бы это сделать –
Вы, кажется, определяете класс с методами 'set_name' и' print_name', фактически не объявляя класс. – chepner