а во время её вызова?
не так
@decorator
def func():
а вот так
def func():
@decorator
func()
ты понимаешь, как работают декораторы?
да
можно назвать это мето методом или оберткой над методом.Есть как поправить или дополнить?
декоратор - функция, принимающая единственным аргументом функцию и возвращающая функцию
а синтаксис @decorator def func(): ... всего лишь сахар для def func(): ... func = decorator(func)
Вообще, не обязательно единственным и не обязательно возвращающая функцию
> не обязательно единственным пример?
Декоратор в качестве метода
> не обязательно возвращающая функцию поправлюсь: принимающая каллабл и возвращающая каллабл
https://docs.python.org/3/library/functools.html
Не обязательно возвращающая колэбл
Ты меня тегнул)
ой сорти, промазал видимо
она может быть декоратором, а может быть фабрикой декораторов
https://docs.python.org/3/glossary.html?highlight=decorator
Интересно, но имхо, в коммьюнити в 98% случаев под термином декоратор подразумевают что-то, что можно повесить на функцию через @. Что оно там возвращает и как уже не столь важно
https://docs.python.org/3/reference/compound_stmts.html#function >>> Decorator expressions are evaluated when the function is defined, in the scope that contains the function definition. The result must be a callable, which is invoked with the function object as the only argument. The returned value is bound to the function name instead of the function object.
Ну здесь ничего не сказано, что результат должен быть колэбл
если вернуть не коллабл, будут беды с несколькими декораторами на одной функции
Не должен но ожидается
про это по первой ссылочке написано
Кем ожидается? Я могу протипизировать свою декораторную функцию, что она вернет не колэбл, и это будет корректно
Потом эту декорированную функцию нельзя будет юзать
Ну допустим вернет она не нон, а какой-то специальный объект. Используйте декораторы для функции ниже этого декоратора, а те, которые могут принимать обертку — выше
Почитал тред и не понимаю каким боком тут декораторы, пардон Имеется ввиду применение @decorator?
https://t.me/ru_python/1516835
как при помощи синтаксиса func = decorator(func) можно передать и в декоратор и в функцию парамметры?(возможно ли это?)
Да согласен, просто не понял почему тут идет обсуждение декораторов возвращающих не-коллабл? Что вообще твм имеется ввиду)
так? @decorator(arg) def func(another_arg): return ...
Ну ты можешь это сделать, это будет функция принимающая аргументы и возвращающая декоратор
это аналогично def func(another_arg): return ... func = decorator(arg)(func)
здесь хорошо видно, что decorator на самом деле не декоратор, а фабрика декораторов
предполагается что декоратор возвращает совместимый по интерфейсу объект. Если декорируем функцию - ожидается коллабл
как мы передаем в func another_arg ? если arg-используется в декораторе и не равен another_arg
Угу, не видел что-то нигде такого контекста как у процитированного собеседника
another_arg не передаётся в этом сниппете, так как сама функция не вызывается
но понятия «декоратор» и «фабрика декораторов» не являются взаимоисключающими, фабрика декораторов вполне может быть декоратором
при этом она даже может быть параметричной
Обсуждают сегодня