В Python используется динамическая, нестрогая (утиная) и явная типизация.
Динамическая: Тип переменной определяется во время выполнения программы, а не на этапе компиляции. Одна и та же переменная может хранить значения разных типов в разные моменты времени.
python
Нестрогая (утиная): Важнее поведение объекта (какие методы и атрибуты он имеет), а не его формальный тип. Если объект "утиным шагом шагает и утиным голосом крякает", то он, по сути, утка, независимо от того, является ли он экземпляром класса Duck. Это позволяет писать более гибкий код.
python
Явная (система подсказок типов): Явное указание ожидаемого типа в коде с помощью аннотаций. Это не влияет на выполнение программы (кроме случаев использования статических анализаторов), но улучшает читаемость, упрощает отладку и позволяет статическим анализаторам (например, MyPy) выявлять потенциальные ошибки типов до выполнения.
python
Сравнение с другими видами:
| Типизация | Время проверки типа | Гибкость | Безопасность (от ошибок типов) | Примеры языков |
|---|---|---|---|---|
| Статическая | Компиляция | Низкая | Высокая | Java, C++, C# |
| Динамическая | Выполнение | Высокая | Низкая | Python, JavaScript, Ruby |
| Строгая | Выполнение | Низкая | Высокая | Java, C++ |
| Нестрогая | Выполнение | Высокая | Низкая | Python, JavaScript, PHP |
В Python сочетание динамической и нестрогой типизации обеспечивает гибкость и быстроту разработки, а явная типизация (с помощью аннотаций) добавляет возможности статического анализа и повышает надежность кода, особенно в больших проектах.