> **Источник:** https://python-all.ru/3.0/library/__future__.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# `__future__` – определения операторов future

`__future__` – настоящий модуль, служащий трём целям:

- Чтобы не запутывать существующие инструменты, которые анализируют операторы import и ожидают найти импортируемые модули.
- Чтобы гарантировать, что future-операторы, запущенные в версиях до 2.1, как минимум вызывают исключения времени выполнения (импорт `__future__` завершится ошибкой, поскольку до версии 2.1 не существовало модуля с таким именем).
- Чтобы документировать, когда были введены несовместимые изменения и когда они станут – или стали – обязательными. Это форма исполняемой документации, и её можно программно просмотреть, импортировав `__future__` и изучив его содержимое.

Каждая инструкция в `__future__.py` имеет вид:

```python
FeatureName = _Feature(OptionalRelease, MandatoryRelease,
                       CompilerFlag)
```

где обычно *OptionalRelease* меньше *MandatoryRelease*, и оба являются 5-кортежами того же вида, что и `sys.version_info`:

```python
(PY_MAJOR_VERSION, # 2 в 2.1.0a3; целое число
 PY_MINOR_VERSION, # 1; целое число
 PY_MICRO_VERSION, # 0; целое число
 PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" или "final"; строка
 PY_RELEASE_SERIAL # 3; целое число
)
```

*OptionalRelease* фиксирует первый релиз, в котором эта возможность была принята.

Если *MandatoryRelease* ещё не наступил, *MandatoryRelease* предсказывает релиз, в котором возможность станет частью языка.

В противном случае *MandatoryRelease* фиксирует, когда возможность стала частью языка; в релизах начиная с этого или позже модулям больше не нужен future-оператор для использования данной возможности, но они могут продолжать использовать такие импорты.

*MandatoryRelease* также может быть `None`, что означает, что запланированная возможность была отменена.

Экземпляры класса `_Feature` имеют два соответствующих метода: `getOptionalRelease()` и `getMandatoryRelease()`.

*CompilerFlag* – это (битовый) флаг, который должен передаваться четвёртым аргументом во встроенную функцию [`compile()`](https://python-all.ru/3.0/library/functions.html#compile) для включения этой возможности в динамически компилируемом коде. Этот флаг хранится в атрибуте `compiler_flag` на экземплярах `_Feature`.

Ни одно описание возможности никогда не будет удалено из `__future__`.
