¿Hay una tabla completa de las “constantes mágicas” de Python?

¿Dónde se __file__ , __main__ , etc., y cómo se llaman oficialmente? __eq__ y __ge__ son “métodos mágicos”, por lo que en este momento me estoy refiriendo a ellos como “constantes mágicas” pero ni siquiera sé si eso es correcto.

La búsqueda de Google realmente no muestra nada, e incluso la propia documentación de Python no parece tener una lista completa de ellos después de escanear las capas de páginas.

Respuesta corta: no . Para la respuesta más larga, que se salió mal de las manos, sigue leyendo …


No hay una tabla completa de esos __dunder_names__ (¡tampoco es su título oficial!), Que yo sepa. Hay un par de fonts:

  • La única “constante mágica” real es __debug__ : es un SyntaxError para intentar asignar a este nombre. Se trata en la lista de constantes y se menciona en el contexto de la statement de afirmación .

  • Otro nombre de nivel de módulo con uso específico por una statement es __all__ , que se documenta junto con la statement de import .

  • Hay dos módulos especiales, documentados en la referencia de la biblioteca , que tienen sus propias páginas:

    • __main__ es el entorno de nivel superior en el que se ejecuta un script.

    • __future__ es para acceder a funciones de idioma que aún no son obligatorias (por ejemplo, print_function para reemplazar la statement de print en Python 2).

  • La mayoría del rest ( __name__ , __file__ , etc.) son agregados a los módulos por el sistema de importación, por lo que se enumeran en la documentación de importación .

También hay muchos relacionados con los objetos. Los métodos básicos para implementar el comportamiento incorporado (como __eq__ y __ge__ , como usted menciona) se enumeran en la documentación del modelo de datos . Pero existen muchos otros nombres más específicos; por ejemplo, hay varios relacionados específicamente con las excepciones, como __cause__ y __traceback__ , en la documentación de las excepciones .


Tenga en cuenta que no hay nada particularmente “mágico” en la mayoría de estos, son solo atributos regulares y se pueden asignar a su gusto. Sin embargo, se consideran reservados para la maquinaria interna de Python, por lo que no debe agregar la suya propia; por la referencia de lenguaje en “clases reservadas de identificadores” :

Cualquier uso de __*__ nombres, en cualquier contexto, que no siga el uso explícitamente documentado, está sujeto a ruptura sin previo aviso.

Dicho esto, hay una pareja de uso común que no creo que se especifique en ningún lugar en los documentos oficiales, como __author__ y __version__ ; ver, por ejemplo, ¿cuál es el formato de encabezado común de los archivos de Python? y ¿cuál es el origen de __author__? Algunos tienen estatus semi-oficial a través de PEP-8 , pero eso es todo.


Algunos otros han recorrido este camino, por su aspecto:

  • ¿Encontrar una lista de todas las variables de subrayado doble?
  • Necesito __closure__
  • Nombres / atributos de variables mágicas incorporadas