* %%__%%_init%%_%%_.py * War in älteren Python-Versionen notwendig damit ein Verzeichnis als Paket erkannt wurde * erlaubt Dinge für das Paket zu konfigurieren ====== __all__ ====== * %%_%%_all%%_%%_ ist eine magische Variable * Type: list * Repräsentation aller "öffentlichen" (also für Zugriff von außerhalb des Packages) gedachten Module * alle in der Liste angegeben Module werden bei from import * importiert __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. ====== Importing/Path Shortening ====== * man kann Module, Klassen und Variablen direkt in der __init__.py importieren die eigentlich irgendwo im Modul liegen * damit werden sie direkt über den Modulnamen zugänglich Folgende Paket-Struktur mypackage mymodule myclass 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.