MiddlePython Developer > Основы Python > Тестирование кода
Короткий ответ Mock — это объект-заглушка, который подменяет реальную зависимость, чтобы тест не обращался к сети, базе данных или окружению. unittest.mock даёт mock-объекты и декоратор patch() для подмены атрибутов, а фикстура monkeypatch из pytest безопасно меняет атрибуты, элементы словарей и переменные окружения с автоматическим откатом. Как это работает подробнее Внешние зависимости не вызываются по-настоящему: вместо них в тест подставляются заглушки с известным поведением, что делает тест быстрым и детерминированным. Mock-объекты. unittest.mock избавляет от ручного создания стабов: после действия проверяют, какие методы и с какими аргументами вызывались, например через mock.method.assert_called_with(...). Настройка поведения. Заглушке задают возвращаемое значение через return_value или заставляют вызов бросить исключение через side_effect. Патчинг. Декоратор patch() подменяет атрибуты модулей и классов в пределах области действия теста. Фикстура monkeypatch. В pytest меняет атрибуты, элементы словарей
mockmonkeypatch
MiddlePython Developer > Основы Python > Объектно-ориентированное программирование
Короткий ответ MRO (Method Resolution Order) — порядок, в котором Python обходит классы при поиске метода или атрибута, особенно когда в иерархии несколько уровней или родителей. Интерпретатор просматривает классы строго в этом порядке и использует первое найденное определение. Как это работает подробнее Просмотр порядка. Посмотреть последовательность для конкретного класса можно методом mro() или атрибутом __mro__. Алгоритм C3. В классах нового стиля порядок строится по C3-линеаризации, которая обходит иерархию в ширину и не даёт классу появиться раньше своих родителей. Связь с super(). super() вызывает следующий класс согласно MRO относительно точки вызова, поэтому предсказать поведение без знания порядка нельзя. Значимость. Понимание MRO критично при множественном наследовании, когда нужно определить, какой из одноимённых методов будет выполнен. Пример кода Что использовать на практике Диагностика. При сомнениях выводи Класс.mro() и проверяй, какая реализация метода будет вызвана. Проектирование. Осознанно
method-resolutionmro
MiddlePython Developer > Основы Python > Веб-фреймворки: Django, Flask, FastAPI
Короткий ответ ORM в Django позволяет работать с реляционной базой данных через Python-классы и методы вместо ручного SQL. Класс модели наследуется от django.db.models.Model и отображается на таблицу, а операции выполняются через менеджер объектов. Как это работает подробнее Каждый атрибут класса модели соответствует колонке таблицы, а за кулисами ORM переводит операции в оптимизированные SQL-запросы. Соответствие. Класс Student с полями name и age превращается в таблицу со столбцами name и age. Менеджер объектов. Записи создают, читают, обновляют и удаляют через Student.objects.create(...), Student.objects.all() и student.save(). Переносимость. Один и тот же код работает с PostgreSQL, MySQL, SQLite и Oracle без переписывания запросов. Миграции. Модели — единый источник истины: на их основе Django генерирует миграции для изменения схемы базы данных. Пример кода Что использовать на практике Данные через модели. Описывай структуру данных классами моделей, а не SQL-скриптами. Типовые операции. Для обычных выборо
databasedjango
JuniorJava Developer > Java Core > JPA и Hibernate
Короткий ответ ORM (Object-Relational Mapping) — техника отображения объектной модели на реляционную базу: класс отображается на таблицу, объект — на строку, поля — на колонки, поэтому разработчик работает с объектами, а не пишет вручную SQL и код преобразования. Hibernate — самый популярный open-source ORM-фреймворк для Java, автоматизирующий CRUD и управляющий персистентностью объектов. Как это работает подробнее Hibernate — это надстройка над JDBC: под капотом он использует JDBC-драйвер базы данных, но берёт на себя низкоуровневую работу — соединения, подготовку и выполнение SQL, генерацию запросов и отслеживание изменений объектов. Основной выигрыш — меньше ручного кода, выше переносимость и поддерживаемость приложения. Маппинг и генерация SQL: объекты автоматически отображаются на таблицы, не нужно вручную писать большое количество SQL. HQL — собственный объектно-ориентированный язык запросов, похожий на SQL, но работающий с классами и их свойствами. Производительность: встроенное кэширование (кэш первог
hibernatejava
SeniorJava Developer > Java Core > Дженерики
Короткий ответ PECS (Producer Extends, Consumer Super) — мнемоническое правило выбора wildcard в параметрах методов: если метод только читает коллекцию («производитель»), объявляйте ? extends T; если только добавляет элементы («потребитель») — ? super T. Правило нужно из-за инвариантности дженериков: List не является подтипом List. Как это работает подробнее «Producer Extends»: метод только читает элементы — коллекция производит данные. Параметр ? extends T задаёт верхнюю границу: Collection примет и коллекцию Animal, и коллекцию любого наследника (Cat, Dog). Читать можно как Animal, а добавлять нельзя (кроме null): компилятор не знает фактический тип элементов. «Consumer Super»: метод только добавляет элементы — коллекция потребляет данные. Параметр ? super T задаёт нижнюю границу: Collection принимает Collection, Collection или Collection. Добавлять можно Cat и его наследников, а при чтении гарантирован только Object. Эталон из JDK: Collections.c
collectionsgenerics
JuniorPython Developer > Основы Python > Инструменты разработки
Короткий ответ PEP 8 — документ с официальными рекомендациями по стилю написания кода на Python: именование переменных и функций, отступы, длина строк, пробелы и оформление импортов. Это общепринятый стандарт, который делает код единообразным и читаемым для всей команды. Как это работает подробнее PEP 8 — одно из предложений по улучшению Python, и именно в нём закреплены договорённости об оформлении кода. Читаемость. Единый стиль позволяет быстро понимать и чужой, и свой код, что особенно важно в командной разработке. Открытые проекты. В open-source следование PEP 8 практически обязательно: это требование проверяют мейнтейнеры и инструменты анализа. Автоматический контроль. Отклонения от стандарта подсвечивают линтеры вроде pylint и специальные проверки стиля. Основные правила. Отступ в 4 пробела, имена функций и переменных в snake_case, классов — в CamelCase, длина строки до 79 символов и пустая строка в конце файла. Что использовать на практике Автоматизация. Подключи линтер или проверку стиля, чтобы отклон
code-stylepep8
MiddlePython Developer > Основы Python > Инструменты разработки
Короткий ответ PEP 8 — это соглашение о кодировании, официальные рекомендации о том, как писать код на Python читаемо: отступы в четыре пробела, длина строк, именование, пробелы вокруг операторов. Соблюдать стиль помогают линтеры вроде Flake8, которые проверяют код, и форматтеры вроде Black, которые сами приводят код к единому виду. Как это работает подробнее PEP расшифровывается как Python Enhancement Proposal — официальный документ-предложение по развитию Python; PEP 8 документирует рекомендации по стилю, и в open-source проектах их соблюдение обязательно. Содержание PEP 8. Правила описывают отступы (4 пробела), длину строк, именование переменных и функций, пробелы вокруг операторов и другое. Линтеры. Flake8 запускается как flake8 path/to/code/, поддерживает выбор проверок через --select E123,W503 и игнорирование через --extend-ignore. Форматтеры. Black автоматически переформатирует код, давая скорость, детерминированность и минимальные диффы при код-ревью. Статический анализ. PyChecker и Pylint ищут баги и
blackcode-style
MiddlePython Developer > Основы Python > Инструменты разработки
Короткий ответ Poetry — это инструмент для управления зависимостями и упаковки Python-проектов. Он описывает проект и его зависимости в файле pyproject.toml по стандарту PEP 621, ведёт файл блокировки poetry.lock с точными версиями и изолирует окружение проекта от глобальной установки Python. Как это работает подробнее Poetry приходит на смену связке pip с requirements.txt и автоматизирует рутину вокруг зависимостей и упаковки. Создание проекта. Команда poetry new poetry-demo генерирует каталог с pyproject.toml, README, пакетом и каталогом тестов. Описание зависимостей. Пакеты указываются в секции project.dependencies с ограничениями версий вроде requests с ^2.13.0. Файл блокировки. poetry.lock фиксирует точные версии всех зависимостей, и его рекомендуют коммитить в систему контроля версий. Изоляция окружения. Poetry работает в собственном виртуальном окружении проекта и не затрагивает глобальную установку Python. Репозитории. По умолчанию используется PyPI, но поддерживаются и приватные репозитории для поиск
dependency-managementpackaging
MiddlePython Developer > Основы Python > Инструменты разработки
Короткий ответ Pull request — это механизм, с помощью которого разработчик предлагает влить изменения из своей ветки или форка в основную ветку репозитория; изменения проходят обсуждение и код-ревью перед слиянием. В GitLab аналогичный механизм называют merge request. Вокруг PR строится совместная разработка в команде. Как это работает подробнее PR — точка входа изменений в общий код: до слияния другие разработчики просматривают и обсуждают код, после чего изменения попадают в основную ветку. Форк. Удалённая серверная копия оригинального репозитория под своим аккаунтом; между форком и оригиналом сохраняется связь, позволяющая вносить вклад обратно. Типовой сценарий. Репозиторий клонируется локально, создаётся feature-ветка, вносятся изменения, ветка пушится, после чего открывается pull request. Ревью и слияние. Другие разработчики просматривают изменения и обсуждают их, затем PR вливается в основную ветку main. Workflow. Git Flow использует ветки для фич, релизов и хотфиксов, GitHub Flow прост: ветка, PR, рев
code-reviewcollaboration
MiddlePython Developer > Основы Python > Веб-фреймворки: Django, Flask, FastAPI
Короткий ответ QuerySet — высокоуровневый API Django для получения, фильтрации и обработки объектов модели; его возвращают методы менеджера вроде Model.objects.all() и Model.objects.filter(). Главное свойство QuerySet — ленивость: запрос к базе выполняется только когда данные действительно нужны. Как это работает подробнее Ленивость позволяет накапливать условия фильтрации и получать ровно один оптимизированный запрос в момент обращения к данным. Момент выполнения. Запрос уходит в базу при итерации, срезе, преобразовании в список, проверке булева значения или вызове len(). Цепочки. Методы filter(), exclude() и order_by() вызываются друг за другом, уточняя итоговую выборку. Переиспользование. Один и тот же QuerySet можно уточнять дальше, не выполняя лишних запросов к БД. Оптимизация связей. Число запросов к связанным объектам сокращают методы select_related() и prefetch_related(). Пример кода Что использовать на практике Уточнение выборки. Строй цепочки filter(), exclude() и order_by() до обращения к данным. П
databasedjango