[Python-de] packages und __init__.py

Joachim Saul list at jsaul.de
Mit Aug 25 07:53:22 CEST 2004


* Manfred Nowak [24.08.2004 19:55]:
> Desöfteren sehe ich jetzt aber solche Inhalte von __init__.py :
>
> #---------------------------------------------------------------
> #  WebFormLib
> #   Copyright (C) 2004 Antonio Cuni (cuni at programmazione.it)
> from Control import Control
> from Directive import Directive
> from Interfaces import Container
> from Interfaces import AbstractDocument
> #---------------------------------------------------------------
>
> Ich finde das eher verwirrend, als das ich dabei Vorteile erkennen könnte.

Der Sinn ist, dass dadurch die logische Modul-Hierarchie (d.h. die
Hierarchie, die der User zu sehen bekommt) von der der zugrunde
liegenden Modul-Dateien entkoppelt wird.

Denn wenn du ein Modul mit sehr vielen Definitionen hast, dann ist
es meist nicht sehr elegant geschweige denn handlich, alles in
eine Datei zu packen. Man importiert die entsprechenden
Definitionen dann in __init__.py. Das hat Vor- aber oft auch
gravierende Nachteile. Ein Vorteil ist z.B., dass der User nicht
merkt bzw. nicht merken muss, wenn eine Definition von einem Modul
in ein anderes verlegt wurde, und ihm sein Code daher nicht um
die Ohren fliegt. Die Modul-Datei, in der sich eine Definition
befindet, kannst du ja stets mit dem __file__ Attribut
heraubekommen. Ein Nachteil dieses Mechanismus' (alle Definitionen
auf oberster Ebene) ist, dass das Importieren eines großen Moduls
sehr langsam sein kann, da vieles importiert wird, was das
Programm gar nicht benötigt. Beispiel SciPy.

Joachim