Дневная сводка: Python Libr — 8 мая 2026
8 мая канал «Python Libr» выпускает две короткие обучающие заметки серии «#урок». День минимален по объёму, но даёт два самостоятельных сюжета о служебных конструкциях Python: модуле __future__ и декораторе @dataclass.
Ключевые события и темы
Модуль __future__: переносим фичи будущих версий в текущий код
Первая заметка объясняет смысл стандартного модуля __future__: импорты вида from __future__ import <feature> включают в текущем модуле поведение, которое появится (или уже появилось) в следующих версиях интерпретатора. Канонические примеры в посте — функция print и оператор деления (/ в Python 3 всегда даёт float, в Python 2 мог давать int). Авторы отдельно вспоминают традиционную пасхалку from __future__ import braces, которая выдаёт SyntaxError: not a chance.
from __future__ import print_function, division
print(1 / 2) # 0.5 даже в Python 2
print(1 // 2) # 0 — целочисленное деление сохраняется
# from __future__ import braces # SyntaxError: not a chance
В современной практике __future__ остаётся полезным для авторов библиотек, поддерживающих несколько версий, и для аккуратной миграции на новые семантики (annotations по PEP 563 — характерный пример).
Ссылки:
@dataclass: компактные «контейнеры данных» одной строкой
Вторая заметка дня — про декоратор @dataclass из стандартного модуля dataclasses. Декоратор автоматически генерирует методы __init__, __eq__, __repr__, __hash__ и ряд других на основе аннотаций типов в теле класса. Принцип такой же, как у __future__, — экономия рутины: ту работу, которую обычно пишут руками, делает компилятор. Канал отдельно подчёркивает, что поля без аннотации типа игнорируются генератором.
from dataclasses import dataclass
@dataclass
class Point:
x: float
y: float
label: str = "origin"
p = Point(1.0, 2.0)
print(p) # Point(x=1.0, y=2.0, label='origin')
print(p == Point(1.0, 2.0)) # True
Ссылки:
Итог
Два коротких обучающих поста о служебных конструкциях Python. Логически они связаны общим мотивом — «компилятор делает рутину за вас»: __future__ переносит синтаксис будущих версий в текущую, @dataclass снимает с разработчика рутину по описанию __init__/__eq__/__repr__. Полезный набор для разработчиков, поддерживающих несколько версий или мигрирующих на современные стандарты.