А вы знали, что Python поддерживает несколько видов типизации? 🤔
Например:
- 🦆 Утиная
- 🦢 Гусиная
- 📜 Статическая утиная типизация
- 🔍 Статическая типизация
В этом посте поговорим про ту типизацию, которая изначально была в Python — Утиную.
Одно время я все никак не мог понять, что это такое. Если вы уже в теме — отлично! Если нет — сейчас расскажу.
Python — язык про поведение, а не про формальности.
Здесь не так важно, от какого класса ты наследуешься.
Важно, что ты умеешь делать!
Пример:
Представь, тебе нужна "последовательность": список, массив, колода карт — не суть.
Python не будет проверять, наследуешься ли ты от `list` или `collections.abc.Sequence`.
Он просто попробует вызвать:
-
__len__()-
__getitem__()Если получилось — значит, ты "последовательность". ✅
class FrenchDeck:
def __init__(self):
self._cards = []
def __len__(self):
return len(self._cards)
def __getitem__(self, pos):
return self._cards[pos]
🔎 Обратите внимание: этот класс ни от кого не наследуется!
Но его можно:
- перебирать в цикле,
- брать срезы,
- передавать в `sorted()`, `random.choice()` и т.д.
Потому что он ведёт себя как список!
То есть тебе просто нужно реализовать нужные методы — и этого достаточно.
🦆 Что такое утиная типизация?
“Если что-то ходит как утка, крякает как утка — значит, это утка.”
Такой подход даёт гибкость:
- Можно писать адаптивный код без лишней иерархии.
- Главное — понимать, какие "протоколы поведения" ждёт от тебя Python.
Хочешь разбираться в таких концепциях глубже?
Учись читать поведение, а не только сигнатуры!
——————————-
📱 TG-сообщество
📱 Обучение
📱 Отзывы
