Risposta breve: no. Per la risposta più lunga, che ha ottenuto mal di mano, continuate a leggere ...
non esiste una tabella completa di coloro __dunder_names__
(anche non il loro titolo ufficiale!), Per quanto ne sono a conoscenza. Ci sono un paio di fonti:
L'unica vera "costante magica" è __debug__
: si tratta di un SyntaxError
per tentare di assegnare a questo nome. È coperto in the list of constants e menzionato nel contesto di the assert
statement.
Un altro nome a livello di modulo con uso specifico da una dichiarazione è __all__
, che è documentata a fianco the import
statement.
Ci sono due moduli speciali, documentate nel library reference, che hanno le proprie pagine:
__main__
è l'ambiente di alto livello in cui viene eseguito uno script.
__future__
è per l'accesso a funzionalità di linguaggio che non sono ancora obbligatori (ad esempio print_function
per sostituire l'istruzione print
in Python 2).
La maggior parte del resto (__name__
, __file__
, etc.) sono aggiunti ai moduli da parte del sistema di importazione, così sono elencati in the import documentation.
Ci sono anche molti relativi agli oggetti. I metodi di base per l'implementazione del comportamento incorporato (come __eq__
e __ge__
, come menzionato) sono elencati in the data model documentation. Ma esistono molti altri nomi più specifici; per esempio, ci sono diversi relativi specificamente alle eccezioni, come __cause__
e __traceback__
, in the exceptions documentation.
Si noti che non v'è nulla di particolarmente "magico" sulla maggior parte di questi, sono gli attributi appena regolari e possono essere assegnati a come meglio credi.Tuttavia, sono considerati riservati per i macchinari Python interni, quindi non dovresti aggiungere il tuo; per the language reference on "reserved classes of identifiers":
Qualsiasi uso di __*__
nomi, in qualsiasi contesto, che non segue l'uso esplicitamente documentata, è soggetto a rottura senza preavviso.
Detto questo, ci sono un paio di uso comune che non credo che in realtà sono specificati ovunque nei documenti ufficiali, come __author__
e __version__
; vedere per es. What is the common header format of Python files? e What is the origin of __author__? Alcuni hanno lo stato semi-ufficiale tramite PEP-8, ma questo è tutto.
Pochi altri hanno calcato questo percorso, tramite gli sguardi di esso:
non sono "costanti magiche", quindi non proprio. Alcuni sono relativi alle importazioni: https://docs.python.org/3/reference/import.html#import-related-module-attributes. '__main__' è qui: https://docs.python.org/3/library/__main__.html. Gli attributi dell'oggetto sono nel modello dati: https://docs.python.org/3/reference/datamodel.html – jonrsharpe
Prova a chiamare la funzione 'globals()' e vedi il risultato. – sehrob
Per curiosità, perché vuoi un tavolo simile? È curiosità sapere cosa c'è? Vuoi definire la tua e sentirti preoccupato di poter entrare in conflitto con qualcosa che è già presente? Se il secondo caso, IIRC, tutti i nomi dunder sono riservati dall'interprete e quindi non dovresti definirne di nuovi. Ce ne sono alcuni che vengono usati così frequentemente che è improbabile che il linguaggio li userà mai per uno scopo diverso (ad esempio '__version__') - anche se _could _... In ogni caso, non si dovrebbe assolutamente andare a definire niente di nuovo. – mgilson