
Hallo zusammen, in __init__.py kann Code zur Initialisierung eines packages stehen. Meistens wird dabei die Variable __all__ benutzt. Desöfteren sehe ich jetzt aber solche Inhalte von __init__.py : #--------------------------------------------------------------- # WebFormLib # Copyright (C) 2004 Antonio Cuni (cuni@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. In Guidos http://www.python.org/doc/essays/packages.html kann ich davon nichts lesen und Google bringt mir auch keine Erleuchtung. Was sagen die Experten dazu? Manfred -- This message has been scanned for viruses and dangerous content and is believed to be clean. _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Hallo Manfred, wenn die Variable __all__ benutzt wird wird eben alles aus den Modulen des Packages importiert, was oft nicht erwünscht ist, dann kommt eben die gezeigte Variante zum Einsatz. Gruß Fritz Am Tue, 24 Aug 2004 19:55:13 +0200 Schrieb "Manfred Nowak" <Manfred.Nowak@mncom.de>:
Hallo zusammen,
in __init__.py kann Code zur Initialisierung eines packages stehen. Meistens wird dabei die Variable __all__ benutzt.
Desöfteren sehe ich jetzt aber solche Inhalte von __init__.py :
#--------------------------------------------------------------- # WebFormLib # Copyright (C) 2004 Antonio Cuni (cuni@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.
In Guidos http://www.python.org/doc/essays/packages.html kann ich davon nichts lesen und Google bringt mir auch keine Erleuchtung.
Was sagen die Experten dazu? Manfred
-- This message has been scanned for viruses and dangerous content and is believed to be clean.
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Hallo Fritz,
wenn die Variable __all__ benutzt wird wird eben alles aus den Modulen des Packages importiert, was oft nicht erwünscht ist, dann kommt eben die gezeigte Variante zum Einsatz.
__all__ ist doch dazu da, um nur _bestimmte_ Sachen zu importieren, wenn man "from <package> import *" eingibt Meine Problem ist ein anderes: wenn __init__.py leer ist, dann steht in der Applikation: from <package>.Interfaces import Container Das dokumentiert, dass Container im Modul Interfaces ist. Wenn aber __init__.py die Zeile enthält: from Interfaces import Container dann steht in der Applikation: from <package> import Container Bei fremdem Code wird man vermuten, es gibt ein Modul Container.py. Wenn dies nicht der Fall ist, muss ich in __init__.py nachsehen, was dort definiert ist. Das finde ich etwas umständlich bzw. verwirrend. Manfred
Gruß
Fritz
Am Tue, 24 Aug 2004 19:55:13 +0200 Schrieb "Manfred Nowak" <Manfred.Nowak@mncom.de>:
Hallo zusammen,
in __init__.py kann Code zur Initialisierung eines packages stehen. Meistens wird dabei die Variable __all__ benutzt.
Desöfteren sehe ich jetzt aber solche Inhalte von __init__.py :
#--------------------------------------------------------------- # WebFormLib # Copyright (C) 2004 Antonio Cuni (cuni@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.
In Guidos http://www.python.org/doc/essays/packages.html kann ich davon nichts lesen und Google bringt mir auch keine Erleuchtung.
Was sagen die Experten dazu? Manfred
-- This message has been scanned for viruses and dangerous content and is believed to be clean.
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
-- This message has been scanned for viruses and dangerous content and is believed to be clean.
-- This message has been scanned for viruses and dangerous content and is believed to be clean. _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Am Tue, 24 Aug 2004 22:18:47 +0200 Schrieb "Manfred Nowak" <Manfred.Nowak@mncom.de>:
__all__ ist doch dazu da, um nur _bestimmte_ Sachen zu importieren, wenn man "from <package> import *" eingibt
Meine Problem ist ein anderes:
wenn __init__.py leer ist, dann steht in der Applikation: from <package>.Interfaces import Container
Das dokumentiert, dass Container im Modul Interfaces ist.
Wenn aber __init__.py die Zeile enthält: from Interfaces import Container
dann steht in der Applikation: from <package> import Container
Bei fremdem Code wird man vermuten, es gibt ein Modul Container.py. Wenn dies nicht der Fall ist, muss ich in __init__.py nachsehen, was dort definiert ist.
Das finde ich etwas umständlich bzw. verwirrend.
Manfred
Hi Manfred, ich verwende zum nachsehen immer pydoc, dem ist es egal ob es ein Modul Container.py gibt oder woher "Container" sonst kommt. Gruß Fritz _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

* 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@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 _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
participants (3)
-
Fritz Cizmarov
-
Joachim Saul
-
Manfred Nowak