Соглашения об именах Python в декораторах
Существуют ли какие-либо "принятые" соглашения об именах для внутренних оболочек декораторов Python?
руководство по стилю не упоминает об этом, и эту удивительную запись о декораторах довольно согласуется с использованием вариантов "завернутого" для конечной функции, которая возвращается, но как насчет имен, используемых при создании декораторов, которые принимают аргументы?
def decorator_name(whatevs):
def inner(function):
def wrapped(*args, **kwargs):
# sweet decorator goodness
return wrapped
return inner
В частности, каковы соглашения для inner
, function
и wrapped
в приведенном выше примере?
Ответы
Ответ 1
Для этих имен нет стандартизованных соглашений (таких как PEP). Если вы проверите stdlib python, вы найдете много разных имен для этих функций.
Однако decorator
является довольно распространенным именем для функции декоратора inner
.
Также часто называть функцию wrapped
wrapper
и украшать ее functools.wraps(f)
, когда f
является завершенной функцией (func
также является общим именем для него).
def decorator_name(whatevs):
def decorator(f):
@wraps(f)
def wrapper(*args, **kwargs):
pass # sweet decorator goodness
return wrapper
return decorator
Ответ 2
По определению декоратор в Python может быть функцией или классом, поэтому тип реализации (класс или функция) является фактором, определяющим, какое соглашение об именовании использовать.
распространенной ошибкой является префикс имени функции с помощью декоратора ключевых слов.
для получения дополнительной информации о декораторах см. ссылка