🐍 Укус питона 🐍
2.45K subscribers
1.07K photos
26 videos
285 links
🐍 Канал о программировании на языке Python. Тематические уроки и лайфхаки.

👽 Админ - @it_dashka
🔊 Купить рекламу: https://telega.in/c/byteofpython

👉 Чат: @abyteofpython
👉 Поделиться с друзьями: @byteofpython
Download Telegram
👩‍💻 Контракты через аннотации — не просто подсказки типов

Аннотации типов (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)
👩‍💻 Динамическое создание классов — метапрограммирование в чистом виде

В 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