Какие знаешь особенности типизации в Python
Python
Junior
Без компании
Какие знаешь особенности типизации в Python
Ответы
Python использует динамическую типизацию — типы переменных определяются во время выполнения, а не компиляции. Однако с Python 3.5+ появилась поддержка аннотаций типов (type hints) через модуль `typing`, что позволяет статически проверять типы с помощью инструментов вроде `mypy`.
**Ключевые особенности:**
- **Утиная типизация** — объект считается подходящим, если реализует нужные методы/атрибуты, а не наследует от конкретного класса.
- **Аннотации типов** (необязательные, но полезные):```
def greet(name: str) -> str:
return f"Hello, {name}"
```
- **Union и Optional**:```
from typing import Union, Optional
def divide(a: float, b: float) -> Union[float, None]:
return a / b if b != 0 else None
```
- **Generics** (обобщенные типы):```
from typing import List, Dict
def process(items: List[int]) -> Dict[str, int]:
return {"count": len(items)}
```
- **Structural subtyping** (протоколы) — типы определяются структурой, а не явным наследованием:```
from typing import Protocol
class Flyer(Protocol):
def fly(self) -> str: ...
```
- **`Any`** — отключает проверку типов, а **`NoReturn`** указывает, что функция никогда не возвращает управление.
Типизация в Python остается динамической, но аннотации помогают улучшить читаемость и надежность кода.