Вопрос по декоратору в Python
Есть декоратор @to_json, он возвращает строку json. Если вызвать print(get_map.__name__), будет ошибка тк get_map - уже строка. @wraps(func) не помогает. Подскажите как быть?
import json
from functools import wraps
def to_json(func):
@wraps(func)
def wrapped():
result = json.dumps(func())
return result
return wrapped()
@to_json
def get_map():
return {
'number' : 100
}
print(get_map.__name__)
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
В декораторе не нужно вызывать wrapped(), нужно просто вернуть ссылку на функцию. Подправил, дополнительно добавил аргументы *args и **kwargs
Пример:
import json
from functools import wraps
def to_json(func):
@wraps(func)
def wrapped(*args, **kwargs):
return json.dumps(func(*args, **kwargs))
return wrapped
@to_json
def get_map():
return {
'number': 100
}
print(get_map)
print(get_map.__name__)
print(get_map(), type(get_map()))
Результат:
<function get_map at 0x0000018F5B88E3A0>
get_map
{"number": 100} <class 'str'>