← Назад к вопросам

Что такое __future__ импорты в Python?

2.2 Middle🔥 131 комментариев
#Python Core#Soft Skills

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое future импорты в Python?

future — это специальный модуль в Python, который позволяет использовать возможности новых версий языка в старых версиях интерпретатора. Это механизм обратной совместимости, который даёт разработчикам время для адаптации кода к кардинальным изменениям в синтаксисе и поведении Python.

Как это работает

Когда Python планирует внести breaking change (не совместимое с предыдущими версиями изменение), команда разработчиков сначала добавляет эту возможность в модуль __future__. Разработчики могут явно включить её через импорт, а в следующих версиях это становится поведением по умолчанию.

Основные примеры

1. print() как функция (Python 2 → 3)

В Python 2 print был оператором (statement), в Python 3 — функцией:

from __future__ import print_function

# Теперь можно использовать как функцию даже в Python 2
print("Hello", "World")

2. Целочисленное деление (Python 2 → 3)

В Python 2 5 / 2 = 2 (целочисленное), в Python 3 5 / 2 = 2.5 (вещественное):

from __future__ import division

# Получить поведение Python 3 в Python 2
result = 5 / 2  # Вернёт 2.5 вместо 2
result = 5 // 2  # Всё ещё целочисленное, даёт 2

3. Абсолютные импорты (Python 2 → 3)

from __future__ import absolute_import

# Принудительно использует абсолютные импорты
# вместо относительных
import os

4. Аннотации как строки (Python 3.7+)

from __future__ import annotations

# Все аннотации типов автоматически становятся строками
# Это позволяет использовать типы, которые определены позже
def func(x: int) -> str:
    return str(x)

class MyClass:
    # Можно ссылаться на класс ДО его определения
    next_item: MyClass | None = None

Важные особенности

Позиция в файле: __future__ импорты должны быть в начале файла, после docstring и комментариев:

"""Module docstring"""

from __future__ import annotations
import sys

# остальной код

Видимость: когда вы импортируете __future__ в один модуль, это влияет только на ЭТО модуль, не на всё приложение:

# Файл a.py
from __future__ import division
result_a = 5 / 2  # 2.5

# Файл b.py
result_b = 5 / 2  # 2 (в Python 2)

Практическое применение

Миграция с Python 2 на 3:

from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from __future__ import unicode_literals

# Теперь код работает как Python 3, но совместим с Python 2
print("Hello")  # функция
x = 10 / 3  # 3.333...

Современное использование (Python 3.7+):

from __future__ import annotations

# Позволяет использовать новый синтаксис типов (PEP 563)
def process(items: list[int]) -> dict[str, int]:
    return {str(i): i*2 for i in items}

Проверка доступных импортов

import __future__
print(dir(__future__))  # Показывает все доступные __future__ импорты

Заключение

future — это механизм smooth migration между версиями Python, позволяющий:

  • Разработчикам подготовиться к breaking changes
  • Языку эволюционировать без потери совместимости
  • Писать код, совместимый с несколькими версиями Python

Сегодня это в основном актуально при использовании новых возможностей Python 3.10+ (pattern matching, union types) или при поддержке старого кода.