Python Разработка | Web Backend, Парсинг & Telegram Bots. Пайтон программирование с нуля. Django, FastAPI и SQL. Уроки для начинающих и IT карьера. Coding.
← К каналу

Ранее мы затронули типизацию в фикстурах (косвенно), поэтому сегодня поговорим про: Protocol vs ABC: Утиная типизация на стероидах (Static Duck Typing…

Ранее мы затронули типизацию в фикстурах (косвенно), поэтому сегодня поговорим про:

Protocol vs ABC: Утиная типизация на стероидах (Static Duck Typing)

В классическом ООП (Java, C#) и при использовании abc.ABC в Python мы привыкли к Nominal Subtyping (Именная подтипизация). Чтобы объект считался Bird, он должен явно наследоваться от Bird.
Это создает жесткую связность (coupling): ваша реализация должна знать об интерфейсе и импортировать его.

С приходом typing.Protocol (Python 3.8+) мы получили Structural Subtyping (Структурная подтипизация).

В чем суть?
Если класс имеет метод quack(), то это Утка. Неважно, от чего он наследуется. Это и есть та самая «утиная типизация», но теперь поддерживаемая статическим анализатором (mypy, pyright, IDE).

Сравним код:

❌ Старый путь (ABC):

from abc import ABC, abstractmethod

# 1. Жестко определяем интерфейс
class SenderABC(ABC):
@abstractmethod
def send(self, msg: str) -> None: pass

# 2. Обязаны наследоваться!
class EmailService(SenderABC):
def send(self, msg: str) -> None:
print(f"Email: {msg}")

def alert(sender: SenderABC):
sender.send("Alert!")
✅ Новый путь (Protocol):

from typing import Protocol

# 1. Описываем, "что мы ждем от объекта"
class SenderProto(Protocol):
def send(self, msg: str) -> None: ...

# 2. Реализация НИЧЕГО не знает про Protocol
# Никаких импортов и наследования!
class SmsService:
def send(self, msg: str) -> None:
print(f"SMS: {msg}")

# Mypy счастлив: SmsService имеет нужную структуру (метод send)
def alert(sender: SenderProto):
sender.send("Alert!")

alert(SmsService())
Киллер-фича: Retroactive Abstraction (Ретроактивная абстракция)
Представьте, что вы используете стороннюю библиотеку (например, boto3 или клиент Redis). Вы не можете заставить их классы наследоваться от ваших ABC.
С помощью Protocol вы можете создать интерфейс для уже существующего чужого кода, не меняя его, и типизировать свои функции.

Нюансы для Middle+:

1. Runtime: По умолчанию isinstance(obj, MyProtocol) выбросит ошибку. Протоколы - это compile-time фича. Если нужна проверка в рантайме, декорируйте протокол @runtime_checkable.

2. Свойства: В протоколе можно описывать не только методы, но и поля через @property или просто аннотации типов.

Используйте Протоколы, чтобы развязать зависимости между модулями. Это основа принципа Dependency Inversion в Python.

#python #typing #mypy #architecture #clean_code

👉 @BookPython
← Предыдущий пост Одной из самых непоследовательных частей синтаксиса Python являются литералы кор… Следующий пост → Если у вас есть ресурсоемкая задача для процессора и вы хотите использовать все …
Другие главы канала «Python Разработка | Web Backend, Парсинг & Telegram Bots. Пайтон программирование с нуля. Django, FastAPI и SQL. Уроки для начинающих и IT карьера. Coding.»
Выберите главу, чтобы продолжить чтение
Все посты →
Глава от 30.04.2026
У Python очень короткий список встроенных констант. Одна из них — Ellipsis, кото…
👁 528 просмотров
Глава от 29.04.2026
💡10 функций, для продвинутых Python-разработчиков 1. Разворачиваем вложенных с…
👁 695 просмотров
Глава от 28.04.2026
Если вы хотите итерироваться одновременно по нескольким итерируемым объектам, фу…
👁 651 просмотров
Глава от 28.04.2026
❓Как управлять техническим подразделением опытных инженеров и быть сильным и муд…
👁 758 просмотров
Глава от 27.04.2026
Иногда в тестах нужно сравнивать сложные структуры, игнорируя некоторые значения…
👁 1 057 просмотров
Глава от 26.04.2026
🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 ht…
👁 1 241 просмотров
Удалить пост или канал с МАКСОТЕКИ
Заявка подтверждается через бота Макс: нужно быть администратором канала и добавить бота МАКСОТЕКИ в администраторы. После проверки канал или конкретный пост скрывается с сайта.
Удалить этот пост Удалить канал
🔍
Архив всех постов Макс
Поиск по тексту среди 3,444,437 постов из 200,432 каналов. Фильтры по дате, видео, репостам и удалённым публикациям.
1 ₽ — 7 дней доступа
далее 490 ₽/мес
Получить доступ за 1 ₽
или войти, если уже есть аккаунт

Связанные темы в других каналах

Каналы из той же тематики, где часто появляются близкие сюжеты
Вся тема →
@canalmaxone
AntiCloudMod
AntiCloudMod — сообщество для тех, кто ценит свободу общения без облачной цензуры. Здесь обсуждают альтернативные мессенджеры, инструменты для приватности и децентрализов…
👥 232 679 · +148 343/7д
@WylsacomRed
Wylsacom Red
Официальный канал Wylsacom в Max. Всё про технологии, гаджеты и цифровую жизнь: обзоры, лайфхаки, новости. Подписывайся, чтобы быть в курсе!
👥 127 374 · +3 819/7д
@BelgorodDRONE
Информация БПЛА Белгород, Белгородский район
Информация БПЛА Белгород, Белгородский район — специализированный канал в мессенджере Макс, посвященный новостям и информации о беспилотных летательных аппаратах в регион…
👥 117 241 · +5 102/7д
@TikTokModCloud
TikTokModCloud
Официальные обновления стабильного мода TikTok Чат: https://clck.ru/3S6mVh По рекламе: https://iimax.ru/dim4ugan
👥 57 371 · +2 344/7д
@hitech
Hi-Tech
Hi-Tech — ваш проводник в мире технологий. Мы оперативно публикуем новости, обзоры гаджетов и собственное видео с тестирований. Следите за трансляциями мировых анонсов и…
👥 54 152 · +2 131/7д
@vilianov
Гаджеты и технологии на Вильянов.Ком
Обзоры цифровой техники и гаджетов от Сергея Вильянова. Более 25 лет помогаю выбирать смартфоны, ноутбуки, наушники и другие устройства, чтобы покупка радовала. Репортажи…
👥 28 674 · -126/7д

Популярные посты канала «Python Разработка | Web Backend, Парсинг & Telegram Bots. Пайтон программирование с нуля. Django, FastAPI и SQL. Уроки для начинающих и IT карьера. Coding.»

Списковые включения (list comprehensions) могут содержать несколько операторов for и if: In : [(x, y) for x in range(3) for y in range(3)] …
👁 6 260 просмотров
Если у вас есть ресурсоемкая задача для процессора и вы хотите использовать все доступные ядра, то multiprocessing.Pool - это то, что вам ну…
👁 6 240 просмотров
Pytest Patterns: Элегантный Teardown через yield и оптимизация скоупов Если вы все еще пишете def teardown_method(self): в классах тестов, …
👁 6 203 просмотров
Pydantic V2: Забываем root_validator, используем model_validator правильно Переход на Pydantic V2, это не только ускорение за счет ядра на …
👁 6 196 просмотров
Structured Concurrency в Python 3.11+ (TaskGroup vs Gather) Если вы до сих пор используете asyncio.gather() для запуска конкурентных задач,…
👁 6 180 просмотров
Одной из самых непоследовательных частей синтаксиса Python являются литералы кортежей. По сути, чтобы создать кортеж, вы просто пишете знач…
👁 6 158 просмотров
10 полезных библиотек для Python-разработчика Сегодня я подготовил для вас подборку из 10 полезных библиотек, которые могут сделать вашу ра…
👁 6 153 просмотров
📌 Декораторы в Python: как они работают и зачем нужны? Сегодня я покажу вам, как работают декораторы в Python и зачем они вообще нужны. Де…
👁 6 150 просмотров
🐍 Как улучшить читаемость кода в Python? Читаемый код - это не роскошь, а необходимость. Если ваш код трудно понять, даже если он работает,…
👁 6 147 просмотров
⚡ Как ускорить код на Python? Используем map, filter, reduce ⚡ Привет, друзья! Сегодня расскажу о том, как можно ускорить выполнение кода, …
👁 6 142 просмотров
Ловушка замыканий: Почему ваши лямбды в цикле сломаны (Late Binding) Вы пишете код, который генерирует список функций (например, колбэки дл…
👁 6 136 просмотров
Профилируем Python в продакшене: почему cProfile не подходит, и чем хорош py-spy Когда на проде начинает течь память или скачет CPU, первая…
👁 6 101 просмотров
Оптимизация SQL-запросов в Django ORM Сегодня я покажу вам, как оптимизировать SQL-запросы в Django ORM, чтобы ваш код работал быстрее и эф…
👁 6 084 просмотров
🔥 Как ускорить Python-код в 10 раз? Сегодня покажу вам мощный инструмент для оптимизации кода - Numba. Это библиотека, которая позволяет ко…
👁 6 054 просмотров
Оптимизация кода с помощью генераторов в Python Сегодня хочу показать вам, как использование генераторов может сделать ваш код быстрее, э…
👁 6 020 просмотров
Обычно вы взаимодействуете с генератором, запрашивая данные с помощью next(gen). В Python 3 вы также можете отправлять значения обратно в ге…
👁 6 010 просмотров
Python поддерживает несколько способов запуска скрипта. Обычный вариант — это python foo.py; в этом случае foo.py просто выполняется. Однак…
👁 6 003 просмотров
🚀 5 крутых Python-фишек, о которых знают не все Python — мощный и удобный язык, но даже опытные разработчики иногда не знают всех его воз…
👁 5 985 просмотров
Как быстро очистить список в Python? Сегодня я покажу вам несколько способов очистки списка в Python и расскажу, какой вариант лучше в зави…
👁 5 951 просмотров
Одна и та же строка может быть представлена по-разному в Unicode, и стандарт это учитывает. Он определяет два типа эквивалентности: последо…
👁 5 924 просмотров
🏷 Темы и теги
#python #typing #mypy #architecture #clean_code #telegram bots #web scraping #django #fastapi #asyncio #Технологии
📋 О канале Python Разработка | Web Backend, Парсинг & Telegram Bots. Пайтон программирование с нуля. Django, FastAPI и SQL. Уроки для начинающих и IT карьера. Coding.
Погрузись в Python с нуля до PRO: Django, FastAPI, парсинг, Telegram-боты и асинхронность. Практические уроки, код и карьерные советы для веб-разработчиков.
📊 Аналитика канала «Python Разработка | Web Backend, Парсинг & Telegram Bots. Пайтон программирование с нуля. Django, FastAPI и SQL. Уроки для начинающих и IT карьера. Coding.» ➡️ Перейти в канал Макс
Заявка в МАКСОТЕКА
📌 Данные подтянутся автоматически по ссылке на канал. Логотип необязателен — ускоряет проверку.
🖼 Перетащите картинку или выберите файл
PNG, JPG, WEBP · до 5 МБ
captcha

Нажимая кнопку, вы соглашаетесь на обработку данных.
Проверим и добавим канал в течение суток.