Аннотации типов (
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
📌 Здесь аннотации становятся частью исполняемого контракта, а не просто документацией.
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выведет код?
x = 0
def outer():
x = 1
def inner():
nonlocal x
x += 1
return x
print("A", inner(), x)
x = 5
print("B", inner(), x)
outer()
print("G", x)
Ответ:
Anonymous Quiz
0%
A 2 1, B 6 5, G 0
40%
A 2 2, B 5 5, G 0
10%
A 2 2, B 6 5, G 0
50%
A 2 2, B 6 6, G 0
В Python классы — это тоже объекты, и их можно создавать "на лету" с помощью функции
type(). Это открывает путь к динамическому API, автоматическим моделям и DSL.def make_model(name, **fields):
return type(name, (object,), fields)
User = make_model("User", name="Анна", age=25)
print(User.name) # Анна
admin = User()
admin.role = "admin"
print(admin.role) # admin
📌 Здесь type() создаёт новый класс User прямо во время исполнения.
Please open Telegram to view this post
VIEW IN TELEGRAM