Найти тему
MRO или Method Resolution Order в Python
MRO - Это порядок разрешения методов и о нем обычно говорят, когда речь заходит о множественном наследовании (кстати, если с ним не знакомы, настоятельно рекомендую немного покопаться в теме). Он определяет последовательность, по которой Python ищет методы и атрибуты в классе и его родителях. Чтобы чуть глубже понять, предлагаю рассмотреть принцип его работы на конкретном примере. Допустим, у нас есть некий класс D, который наследуется от классов B и C, которые наследуются от класса A, который ....
2 месяца назад
defaultdict в Python
Что еще за defaultdict и зачем нам еще один dict? Давайте об этом и поговорим в статье. Это подкласс встроенного класса dict, который вызывает фабричную функцию, позволяющую задать дефолтное значение для новых / несуществующих ключей. Во всем остальном он схож с уже знакомым нам dict. Если упростить и вывести термин, опираясь на название, то получается, что это просто словарь с значениями по умолчанию. Аргументы Первый аргумент предоставляет начальное значение для атрибута default_factory, которое по умолчанию равно None...
4 месяца назад
Автоматическое присваивание значений в Enum
Представим ситуацию: вы любите все структурировать и храните много данных в енамах: Enum, StrEnum, IntEnum и так далее. В какой-то момент обязательно накопится большое количество структур, где символическое имя будет равно значению, как в примере ниже: Как красиво выйти из этой ситуации? Об этом мы и поговорим. В первую очередь, стоит обратить внимание на класс auto из Enum. Он позволяет нам автоматически присваивать значения для каждого символического имени, мы можем просто указать его в виде значений:...
6 месяцев назад
Элегантное подавление исключений с contextlib.suppress
Бывает так, что какой-либо метод при работе программы выдает исключение, но нам не надо его обрабатывать каким-нибудь хитрым образом, а достаточно лишь подавить исключение и идти дальше. Это можно сделать с помощью классического try-except, но есть и более элегантный способ. Когда это может пригодиться и как пользоваться? Об этом и поговорим в статье. Делать это без надобности строго не рекомендуется. Но бывают моменты, когда мы знаем, почему вызывается исключение и уверены, что оно не несет никаких рисков для нас...
7 месяцев назад
Немного про лямбда-функции в Python
Что это такое? Lambda или анонимные функции - это по сути небольшие функции без имени, написанные в одну строку. Для их объявления нам не нужно следовать классической схеме - указывать литерал def и имя будущей функции. Нам достаточно следовать такой конструкции: lambda arguments : expression Это и есть весь синтаксис лямбда-функций. Главные моменты: Как и когда использовать? Чаще всего, лямбда-функции используют в нескольких случаях: Рассмотрим чуть подробнее. Лямбда-функция как аргумент в других функциях Очень удобно применять лямбда-функции при работе с map() и filter()...
10 месяцев назад
Подчеркивания в именах Python. Коротко о главном
Без особых углублений в детали давайте разберем главные нюансы в применении подчеркиваний в именах Python. Рассмотрим все часто используемые варианты. Более детально некоторые аспекты буду освещать в будущих статьях. Приступим! 1. Игнорирование значений Игнорирование одного значения Часто можно встретить запись подобного вида: или такого: В этом случае одно подчеркивание позволяет нам опустить использование имени, когда оно попросту ненужно. По сути, мы просто присваиваем значение символу нижнего подчеркивания и дальше в коде его не используем...
11 месяцев назад
Работа с YAML-файлами с использованием библиотеки PyYAML
YAML - кто ты такой? YAML (YAML Ain't Markup Language) - популярный формат для хранения данных, в особенности, конфигов. К примеру, конфигов для gitlab CI, для хуков линтеров в pre-commit описываются в YAML. Формат легко читается, для восприятия легче, чем JSON, особенно когда структура сложная. Кроме того, YAML легко преобразуется в dict и с ним удобно работать через код. Расширение файла может выглядеть и как ”.yml” и как “.yaml”, разницы нет. Синтаксис и структура Напишем небольшой конфиг и разберемся, как прописывать разные типы данных в YAML-файле...
11 месяцев назад
ABC или Абстрактные классы в Python
Работая с сложными объектами, которые имеют похожее назначение, часто можно попасться на удочку дублирования. Решить подобную проблему, предоставить общий интерфейс классам и пришел модуль abc или Abstract Base Classes. Кроме того, это отличный способ практиковать хорошие принципы проектирования и использования парадигм ООП. Итак, абстрактный класс - это класс, в котором реализован хотя бы 1 абстрактный метод. Можно представить его как чертеж, по которому будут строиться дочерние классы. В свою очередь,...
11 месяцев назад
print() или pprint(), вот в чем вопрос
Рассмотрим применение одной из самых часто используемых функций и определим, в каких случаях лучше использовать ее собрата pprint(). print() Функция print() не нуждается в представлении, обычно она и является первым шагом в сторону изучения Python. print("Hello, Python!") > Hello, Python! print() - это встроенная функция, и кроме каких-то объектов, которые она принимает для вывода, у нее есть несколько полезных аргументов, о которых не все знают на начальных этапах. print(*objects, sep=' ', end='\n', file=None, flush=False)...
11 месяцев назад
Встроенные функции Python. Работа с атрибутами объектов
Рассмотрим на примерах, как взаимодействовать с атрибутами объектов с помощью встроенных функций hasattr(), getattr(), setattr(), delattr(). Для начала определим, что такое атрибут. Простыми словами, это что-то вроде переменной, которая связана с объектом и хранит в себе какие-то данные. Создадим экземпляр класса Cat и разберем работу с атрибутами при помощи встроенных функций. class Cat: def __init__(self, name: str, age: int) -> None: self.name = name self.age = age cat_bob = Cat(name="Bob", age=2) hasattr()...
1 год назад
List comprehension и не только
List comprehension можно перевести по разному, будь то генератор списков, списочное выражение или списочное включение, но я буду использовать предпочтительно оригинал "list comprehension" и "списочное выражение". :) List comprehension или списочные выражения – это простой для чтения, компактный и удобный способ создания и обработки списка из любого существующего итерируемого объекта. Обычно это всего одна строка кода, заключенная в квадратных скобках. List comprehension можно использовать для фильтрации,...
1 год назад
Аннотации типов в Python
Все мы знаем, что Python - язык с динамической типизацией. Но с довольно давних пор в нем также появилась возможность явно указывать типы данных и это здорово матчится с принципом дзена Python: явное лучше неявного (Explicit is better than implicit). Зачем их вообще указывать? Да, аннотации являются необязательными, но я бы сказал, что это правила хорошего тона для программистов. Важно четко понимать, с чем ты работаешь. Это поможет избежать ошибок (зачастую нетривиальных), когда параметр обрабатывает несколько типов данных или принимает какие-то сложные объекты...
1 год назад