In cherryPy
per esempio, ci sono file come:Qual è il prefisso di sottolineatura per il nome del file Python?
__init__.py
_cptools.py
Come sono diversi? Cosa significa questo?
In cherryPy
per esempio, ci sono file come:Qual è il prefisso di sottolineatura per il nome del file Python?
__init__.py
_cptools.py
Come sono diversi? Cosa significa questo?
__...__
significa riservato Python nome (sia nei nomi di file che in altri nomi). Non dovresti inventare i tuoi nomi usando la notazione doppio-underscore; e se usi esistenti, hanno funzionalità speciali.
In questo esempio particolare, __init__.py
definisce l'unità "principale" per un pacchetto; inoltre fa in modo che Python tratti la directory specifica come un pacchetto. È l'unità che verrà utilizzata quando si chiama import cherryPy
(e cherryPy
è una directory). Questo è brevemente spiegato nel Modules tutorial.
Un altro esempio è il metodo __eq__
che fornisce il confronto di uguaglianza per una classe. È possibile chiamare tali metodi direttamente (e li si utilizza implicitamente quando si utilizza l'operatore ==
, ad esempio); tuttavia, le versioni più recenti di Python potrebbero definire più metodi di questo tipo e quindi non dovresti inventare i tuoi nomi __
perché potrebbero poi collidere. È possibile trovare un elenco abbastanza dettagliato di tali metodi nei documenti Data model.
_...
viene spesso utilizzato come nome "interno". Ad esempio, i moduli che iniziano con _
non dovrebbero essere usati direttamente; allo stesso modo, i metodi con _
sono presumibilmente-privati e così via. È solo una convenzione, ma dovresti rispettarla.
__init__.py
è un file speciale che, quando esistente in una cartella, trasforma tale cartella in modulo. All'importazione del modulo, viene eseguito __init__.py
. L'altra è solo una convenzione di denominazione, ma direi che non si dovrebbe importare direttamente quel file.
Dai un'occhiata qui: 6.4. Packages per una spiegazione su come creare i moduli.
Regola generale: se qualcosa in Python è namend __anything__
, allora è qualcosa di speciale e dovresti leggerlo prima di usarlo (ad esempio funzioni magiche).
Questi ed altri, convenzioni di denominazione sono descritti dettagliatamente in Style Guide for Python Code - Descriptive: Naming Styles
Brevemente:
__double_leading_and_trailing_underscore__
: oggetti o attributi che vivono in namespace controllate dall'utente "magici". Per esempio. __init__
, __import__
o __file__
. Non inventare mai tali nomi; usarli solo come documentato._single_leading_underscore
: debole indicatore "uso interno". Per esempio. from M import *
non importa oggetti il cui nome inizia con un trattino basso.
Non è espressamente vietato inventare il proprio nome.È * scoraggiato * perché la lingua potrebbe aggiungere più nomi di questo tipo in futuro, quindi lo spazio dei nomi è riservato. L'uso dei nomi '__...__' per i propri progetti è a proprio rischio. –
@MartijnPieters: ok, sostituito da "non dovrebbe". –