Существует ли обширная таблица "магических констант" Python?

Где __file__, __main__ и т.д., и что они официально называются? __eq__ и __ge__ являются "магическими методами", поэтому прямо сейчас я имею в виду их как "магические константы", но я даже не знаю, правильно ли это.

Поиск в Google действительно ничего не вызывает, и даже документация на Python, похоже, не имеет исчерпывающего списка из них после сканирования через слои страниц.

Ответ 1

Короткий ответ: нет. Для более длинного ответа, который получил плохо из-под контроля, продолжайте читать...


Нет исчерпывающей таблицы этих __dunder_names__ (также не их официального названия!), насколько мне известно. Есть несколько источников:

  • Единственной реальной "магической константой" является __debug__: a SyntaxError попытаться присвоить это имя. Он включил в список констант и упомянул в контексте the assert.

  • Другое имя уровня модуля с конкретным использованием инструкцией __all__, которое документировано вместе с инструкцией import.

  • В справочной системе __main__ - это среда верхнего уровня, в которой выполняется script.

  • __future__ предназначен для доступа к языковым функциям, которые еще не являются обязательными (например, print_function для замены print в Python 2).

Большинство остальных (__name__, __file__ и т.д.) добавляются в модули с помощью системы импорта, поэтому перечислены в импортную документацию.

Существует также много объектов, связанных с объектами. Основные методы реализации встроенного поведения (например, __eq__ и __ge__, как вы упоминаете) перечислены в документации модели данных. Но существует множество других, более конкретных имен; например, существует несколько связанных с исключениями, таких как __cause__ и __traceback__, в документации по исключениям.


Обратите внимание, что в большинстве случаев нет ничего особо "волшебного", они просто регулярные атрибуты и могут быть назначены по своему усмотрению. Однако они считаются зарезервированными для внутреннего оборудования Python, поэтому вы не должны добавлять свои собственные; per ссылка на язык "зарезервированные классы идентификаторов" :

Любое использование имен __*__ в любом контексте, которое не следует явно документированному использованию, подвержено поломке без предупреждения.

Тем не менее, есть пара общего использования, которое, как я полагаю, не указано нигде в официальных документах, например __author__ и __version__; см., например, Каков общий формат заголовков файлов Python? и Каково происхождение __author__? Некоторые из них имеют полу -фициальный статус через PEP-8, но об этом.


Несколько других проложили этот путь, взглядами этого: