init.py
__all__ = [module1, module2, module3]
Beliebige Datei:
from somepackage import * module2.something()
In obigem Beispiel sieht man das das Modul module2 nicht explizit importiert wurde, sondern * aus somepackage (in dem auch module2 liegt).
Da * importiert wurde wurden module1, module2 und module3 die in __all__ stehen importiert.
Ein Modul „module_intern“ welches nicht in __all__ steht würde nicht mit importiert werden.
Folgende Paket-Struktur <code> mypackage
mymodule myclass
<code>
Wenn in der __init__.py folgendes gemacht wird
from mymodule import myclass
Kann man in einer beliebigen Datei das hier machen:
import mypackage bla = mymodule.myclass()
In obigem Beispiel wird also direkt auf myclass zugegriffen obwohl nur das Package importiert wurde und nicht das Modul in dem myclass definiert ist.
Das geht weil __init__.py die Klasse importiert hat.