2015-07-09 16 views

risposta

14

__init__.py viene eseguito quando si importano un pacchetto in un programma in esecuzione pitone. Ad esempio, import idlelib all'interno di un programma, viene eseguito idlelib/__init__.py, che non fa nulla in quanto il suo unico scopo è quello di contrassegnare la directory idlelib come un pacchetto. D'altra parte, tkinter/__init__.py contiene la maggior parte del codice tkinter e definisce tutte le classi del widget.

__main__.py è gestito come '__main__' quando si corsa un pacchetto come il programma principale. Ad esempio, python -m idlelib su una riga di comando viene eseguito idlelib/__main__.py, che avvia inattiva. Analogamente, python -m tkinter corre tkinter/__main__.py, che ha questa linea:

from . import _test as main 

In questo contesto, è .tkinter, quindi importando . importazioni tkinter, che corre tkinter/__init__.py. _test è una funzione definita all'interno di quel file. Quindi chiamare main() (riga successiva) ha lo stesso effetto di eseguire python -m tkinter.__init__ nella riga di comando.

+0

Suggerimento di Markdown per riferimento futuro: utilizzare una escape backslash durante la scrittura di '\ __ init __. Py' e simili per impedire a Markdown di farlo semplicemente in grassetto. –

+0

Perché 'tkinter' ha un sacco di codice nel file' __init __. Py' mentre 'idlelib' non ha il codice lì? C'è una ragione per cui a volte vorresti avere il codice in '__init __. Py? Ma altre volte no? – HelloGoodbye

+0

Il codice in 'package/__ init __. Py' fa in modo che il' pacchetto di importazione 'faccia qualcosa. Prima della 3.0, 'Tkinter' era un modulo, non un pacchetto. Nella 3.0, il codice in 'Tkinter.py' è stato inserito in' tkinter/__ init__.py, quindi l'unica modifica necessaria era 'import tkinter' invece di' import Tkinter'. –

1

__init__.py, tra le altre cose, etichetta una directory come una directory python e consente di impostare variabili a livello di pacchetto.

__main__.py, tra le altre cose, viene eseguito se si tenta di eseguire un gruppo compresso di file python. __main__.py consente di eseguire i pacchetti.

Entrambe queste risposte sono state ottenute dalle risposte collegate. C'è qualcos'altro che non hai capito di queste cose?

Problemi correlati