[00:01] эта строка? Имею в виду, это выглядит как атрибута, но это может быть свойство, что вызовов API. Технически ничего плохого [00:13] обращении к свойства, но определенные ожидания. Сегодня я покажу семь постоянно пользуюсь, но точно не [00:25] компромиссы для каждой из них. Итак, Свойство отлично подходит для вычисляемых атрибутов. Например, [00:38] определить полное имя человека на основе его можете легко сделать нечто подобное в чтение свойства делает намного [00:51] выполняет удаленный вызов, это скрывает выглядит как простое поле. Как в той строке Если у вас есть свойство, что [01:04] но на самом деле она устанавливает соединение налоговые ставки, проверяет валидность исчисляет сумму. Что ж, это не очень разумно. Это [01:16] обращаетесь к свойства, вы ждать неприятный сюрприз. Вместо этого гораздо лучше превратить ее в [01:28] даже можете добавить ключевое слово get действительно что-то получает. сделать его асинхронным, чтобы еще [01:40] Итак, вывод: используйте поведения, похожего на атрибуты. Если вы выполняете любые сложные операции, [01:52] методом. Кстати, именно эту разницу между программное обеспечение я Мастерство проектирование ПО». Эта [02:04] системного дизайна и архитектурных большим количеством практических примеров этих дизайнерских решениях самостоятельно, [02:17] aron.codes/mastery. Ссылки также есть в описании. Второй data classes), и я сам грешил этим. Имею в с устранением шаблонный код. Они [02:29] экземпляров и их вывод, а еще мне можно просто посмотреть на данные содержатся в объекте. Но каждое [02:43] поскольку дата-класс предназначен для простых структур данных. Итак, есть такой дата-класс корзины покупок, что [02:55] то проблема в том, что если я создам один из установить скидку, ну , не знаю, 200% или что-то никакого смысла с точки вид бизнеса. И в [03:08] здесь нет никаких гарантий, ограничений или открывает доступ к каждого поля, что объект имеет отвечать за [03:20] соблюдение. покупок, который не есть дата-классом, это обычный старый класс Python. Он имеет [03:32] тот дата-класс, что был раньше, но теперь он добавление товара, и он прибавит товар положительная, или для применение скидки. [03:44] применить скидку только в пределах от нуля использовано свойство (property), а суммы товаров. И это все данные, которые мы уже имеем [03:56] простое вычисление. миллионы товаров. Дата-классы все еще конфигурации, события, объекты значений, но [04:09] каждый доменный объект на дата-класс. Должен злоупотреблять дата- классами, особенно в поступайте так, как я говорю, а не так, как я поступаю. [04:22] образцом (pattern matching). Это очень крутая функция проверить структуру . Например, в этом можем применить сопоставление с [04:34] есть пользователь администратором, или или любой комбинацией таких на основе этого. Мать такие функции в своем [04:46] ими также легко злоупотребить, если не Поскольку в этом случае, вместо того образцом, мы можем просто проверить [04:58] admin, и это все, что нам нужно. В этом которую мы имеем здесь, гораздо понятнее у нас есть сейчас. [05:10] станет сложнее, будет комбинацией этих или будет привлекать другие вещи в будущем. причиной сделать нечто подобное. Однако, [05:23] простое решение, оно часто понятнее. кэширование, и в Python это выглядит невероятно декоратор cache, который можно импортировать из [05:35] функцией, и она кэшируется. Это действительно functools работает очень хорошо, результат кэша он подходит не для всех случаев. [05:48] обмена валют, но если курс изменится, старое кэшированное значение. Это значит, несоответствия, устаревшие данные и все [06:02] приносят кэши. Вы можете сделать это определив время жизни и ограничение кэша. И какой я здесь использую, под [06:14] работает очень хорошо. Вы можете определить этот указать максимальный размер, значение TTL, должно хранить это значение. А потом вы [06:27] декоратор почти да само, как functools cache, но cache. И теперь ваш курс обмена валют имеет значительно облегчает [06:39] нужно их обновлять. В общем, в своих скриптах, потому что это может четко понимать ограничение кэша, который [06:52] Итак, Python действительно отличный механизм сделать сквозную функциональность, как- лаконичным. Вы можете просто добавить [07:05] волноваться. Проблема в том, что есть куча разных декораторов, которые вы как в нашем случае [07:17] create account здесь имеет четыре связаны с ею декораторы. Здесь есть аудит, повторные нужны разрешения, и так далее. Результат [07:31] происходит при вызова этой функции, информации, но я не понимаю, что именно декораторы. Кроме того , теперь вы должны [07:43] эти декораторы. В каком порядке они можно понять, только если знать, что сущности, обертка функции. Итак, у нас есть [07:55] разрешения вызывает создание, потому что это декоратор. Транзакционный транзакционный, а аудит – повтор. Таким [08:08] это правильный порядок? Возможно, , не правда ли? Или когда мы хотим, чтобы запускаем функцию создание учетного [08:20] длинный список декораторов, как здесь. И опасными, потому что мы не хотим случайно учетных записей. [08:33] , которые сейчас как скрыты за структурами декораторов. Так что я [08:45] сквозного поведения , но не скрывайте опрятного вида тела функции, потому что это на самом деле происходит. [08:57] происходит. -это async. Async – очень хорошая функция. Она выводу параллельно, что сделает ваше приложение [09:11] более чувствительными. Проблема в том, что свойство распространяться, если вы есть асинхронный API- вызов, то функция, что [09:25] становится асинхронной, и неслышите, как все у вашему скрипту станет async. И это проблема. В держать бизнес- логику как можно дальше [09:39] вопрос, а не вопрос бизнес логики. бизнес логики. решение имеет приниматься на основе [09:52] этого профиля. А еще в меня есть политика собственно, и есть бизнес- логикой, что на основе каким будет результат. [10:05] провайдера кредитных профилей. Итак, кредитных профилей асинхронный, или если становится асинхронным, и тогда наша бизнес- [10:18] логика тоже становится асинхронной. Итак, вы асинхронный кредитный API с можете создать блокирующий адаптер, [10:31] синхронным вызовом метода И именно это мы меня есть get profile, но он использует asyncio.run профиля. А потом в главной функции я [10:45] политику оформления заказ. Таким оставаться синхронной, что хорошо. используется asyncio.run, поэтому если вы [10:57] цикле событий, это не будет работать. Тем не менее, применить во время редизайн – это ) и просто превратить это в [11:09] бизнес-логики. заказ получало не только кредитный профиль. [11:26] больше не нужно это делать. А потом вы главную функцию асинхронной. Это нужно вызвать ее с помощью async.run. [11:39] используем этот блокирующий провайдер, заказ. класса и сделав функцию оформления [11:53] ожидает заказа и профиль. я могу функцию оформления заказ. Тогда главная функция – это создать провайдер [12:07] получить профиль здесь. [12:19] могу передать профиль сюда. И, нужна эта блокирующая обертка провайдера профиля. Следовательно, это еще один способ сохранить [12:32] , но я использую ее на уровне периферии функции – я не полагаюсь на просто передаю данные. В общем, держите [12:44] используйте обертку, чтобы не вашей логике, или получайте данные по аргументы. Таким образом ваша бизнес- [12:56] инфраструктуры Последняя вещь, которую я также связана с дата-классами – это функция slots. Это то, что оптимизирует дата-классы, [13:08] и это приятно. значениями X и Y, вы можете установить slots объектную модель, которую использует Python. [13:20] Например, вы больше не сможете сделать то Python – назначить атрибут постфактума. добавить к ней метку, вы не сможете этого [13:33] сделать. Это приведет к ошибке. Это вы модель меняется, поэтому у вас больше какой можно редактировать. И хотя это [13:46] обычных дата- классов и классов Как, которая является простым дата- классом без Вы также можете увидеть это, когда я [13:59] говорю, что вы не должны использовать slots. память для многих небольших статических включать для каждого класса, поскольку это [14:11] разработчиков, которые используют ваш такое дополнительное ускорение даже использую slots только [14:23] разных объектов. Я знаю, что не буду атрибуты. И если я использую их в применял их там, где есть доступ в [14:35] посторонних систем. При этом, я считаю, что в если вы динамично назначаете атрибуты обычно избегал этого у своих [14:47] что это означает потерю значительной части Это означает, что если у вас есть гибкая точка, вы какие данные будут ее частью. Поэтому я [14:59] если вам нравится таков контент о Python на канал. Это помогает мне бы хотел услышать вашу мнение. Какие функции [15:11] используют чрезмерно или некоторыми пунктами, которые я сегодня добавил к Вот видео, которое, на мнение YouTube, вам [15:23] встречи следующего see you next time.