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

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

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

One Solution collect form web for “Существует ли обширная таблица «магических констант» Python?”

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


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

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

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

  • Есть два специальных модуля, задокументированных в справочнике библиотеки , которые имеют свои собственные страницы:

    • __main__ – это среда верхнего уровня, в которой выполняется сценарий.

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

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

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


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

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

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


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

  • Поиск списка всех двухзначных переменных?
  • Мне нужно __closure__
  • Встроенные имена / атрибуты магической переменной
  • Включение вывода отладки для python 3 urllib
  • Автозаполнение для gtk3 и pygobject
  • Python 3 встроенных типов __init__ не вызывает super () .__ init__?
  • Всегда верно при тестировании, если string == различные OR'ed альтернативы
  • Отладка HTML довольно-печатная для Python
  • PEP 0492 - ключевое слово async для Python 3.5
  • Прервать выполнение модуля в Python
  • Как утверждать операторы <и> = не реализованы?
  • Python - лучший язык программирования в мире.