👩💻 Контракты через аннотации — не просто подсказки типов
Аннотации типов (type hints) — это не только помощь IDE.
С их помощью можно внедрять контроль логики исполнения — проверять типы, значения и инварианты прямо во время работы программы.
➡️ Пример:
from typing import get_type_hints
def enforce_types(func):
hints = get_type_hints(func)
def wrapper(*args, **kwargs):
for name, arg in zip(hints, args):
if not isinstance(arg, hints[name]):
raise TypeError(f"{name} должен быть {hints[name].__name__}")
return func(*args, **kwargs)
return wrapper
@enforce_types
def greet(name: str, age: int):
print(f"{name}, {age}")
greet("Анна", 25) # ✅
greet("Анна", "25") # ❌ TypeError
📌 Здесь аннотации становятся частью исполняемого контракта, а не просто документацией.