2012-08-30 13 views

risposta

19

__...__ 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.

+4

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. –

+2

@MartijnPieters: ok, sostituito da "non dovrebbe". –

7

__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).

11

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.
Problemi correlati