Comments 12
Переводить даже такие простые статьи непрофессионалу оказалось довольно сложно, буду рад любым замечаниям и дополнениям.
Заголовок у вас несколько кликбейтный. Кто не расскажет? В любом нормальном учебнике рассказывают примерно в пятьсот тридцать два раза лучше и полнее.
Статья только кажется толковой, а на самом деле (ИМХО!) - гавно. Я не имею в виду перевод, вы - молодец. Почему гавно? Да потому что вся эта "игровая атмосфера" с мифами и их разоблачением, как бы сказать чтобы никого не обидеть... для неумных людей. А для умных людей любая технология созданная людьми отвечает на некоторый вопрос, решает какую-то проблему. С этого надо начать. Питон существовал уже пятнадцать лет, когда в него добавили декораторы. Он и без декораторов отлично себя чувствовал. Зачем добавили, делать нефиг было? Нет, добавили потому что заметили часто используемый паттерн. Декораторы - это синтаксический сахар, не более. Объясните, как было без сахара, объясните, в чем смысл паттерна, потом покажите, как сахар делает паттерн лучше и выразительней.
Вот он весь паттерн:
obj = decorator(obj)Здесь нет ни одного мифа, который автор текста мужественно развенчивает.
Отличная рецензия :) +1
Я с вами совершено согласен, хотя я совсем новичок. Еще при первой встрече с декораторами и их объяснением я никак не мог понять: а зачем? Это же противоречит дзену пайтона. Я выделил ряд пунктов, по которым считаю, что декораторы все запутывают:
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Если я ошибаюсь, буду благодарен за объяснение - в чем именно. Ну не вижу я простоты в них и облегчения понимания кода. Или это лишь дело опыта и привычки?
Вы ошибаетесь. Вероятно, ваша ошибка связана с тем, что вы путаете две связанные с декораторами задачи "как написать свой декоратор" и "как использовать декоратор". Для новичка в программировании это может быть сложно глядя в код конкретного декоратора разобраться как он работает. Тем не менее, декораторы - это не то, что программисты пишут каждый день по сто штук, это скорее библиотечный код, который пишут для большого класса задач, вам не надо читать код декоратора каждый раз когда вы видите его использование в виде
@my_decorator
def func():
...
в месте применения декоратора нет никаких антипаттернов, вы скоро к ним привыкнете и начнете любить
Я бы сказал, не самый удачный выбор статьи для перевода.
Первая часть банальна и есть в любом учебнике
Вторая часть - сплошные вредные советы. То, что так можно, не значит, что так стоит делать.
Третья часть страдает от синтетических примеров.
Проверка констант в функциях - задача статического анализатора, а не runtime-кода.
Регистрация и диспетчеризация функций - примеры в любых библиотеках для чат ботов, ну или тот же Flask.
Спасибо за мнение! Поделитесь, что именно не стоит делать и почему?
Ну отчасти статья это указывает в послесловии (до которого не все дочитают).
Да, декоратор не обязан возвращать именно функцию. Но это должен быть хотя бы callbale object, а пример со строками - не самый удачный.
@len
@func_name
def nineteen_characters():
"""are in this function's name"""
pass
nineteen_characters
# 19
Вот такое превращение функции в int - хороший способ выстрелить себе в ногу. Ну или не обязательно себе, а тому, что этот код будет разбирать.
Мне интересно, а почему никто никогда не рассказывает про асинхронные декораторы? Тему обычных декораторов разобрали вдоль и поперек, здесь все понятно. А вот иногда надо какую-то решить проблему с асинхронным декоратором, а информации в интернете 0 об это.
Автор сначала доказывает, что "декораторы — это не «функции, которые принимают функции и возвращают функции», а потом во всех полезных примерах исползует именно этот подход :)
Это уже не первая статья которая показывает насколько Python гибкий и многие вещи можно использовать "необычным способом" :)
В книге Лутца есть очень хороший и большой раздел про декораторы. Кому интересна эта тема рекомендую почитать. Тоже много интересных подробностей.
Декораторы, о которых вам не расскажут