Ich verwende __init__.py
, um Prüfungen durchzuführen, wenn ich from myprojects.something import blabla
mache.Verwendung von __init__.py
Heute begann ich mit pyzmq
und ich wollte sehen, was hinter den Kulissen vor sich geht. Also habe ich den Code in GitHub durchsucht und finde (für mich) eine seltsame Verwendung von __init__.py
dort, die ich mir nicht erklären kann.
Zum Beispiel zmq/core/__init__.py
. Was ist der Sinn der zmq.core.__all__
zmq.core.constants, zmq.core.error, zmq.core.message, etc.
?
In zmq/__init__.py
sehe ich am Ende
__all__ = ['get_includes'] + core.__all__
wo get_includes
eine Funktion ist, die im Grunde eine Liste mit dem Verzeichnis des Moduls zurückgibt und Verzeichnis UTILS in das übergeordnete Verzeichnis.
Was ist der Sinn davon? Was hat __init.py__
dadurch erreicht?
Ich habe diesen Teil der Dokumentation gelesen, bevor Sie hier nachfragen. Aber das beantwortet meine Frage immer noch nicht. Vielleicht sollte ich anders fragen: Ich dachte, dass der Grund für die Verwendung von 'aus bla import ble' darin bestünde, dass du deinen Namespace kontrollierst, dh du entscheidest, welche Symbole du deinem Namen hinzufügst. – Pablo
Wie im Gegensatz zu C, wo die Verwendung von '# include' eine Kollision mit bereits definierten Funktionen, Variablen usw. verursachen könnte, sollten Sie nur die Symbole importieren, die Sie wirklich benötigen. Ich habe irgendwo in der Python-Dokumentation gelesen, dass die Verwendung von 'from bla import *' keine gute Angewohnheit war. Wenn ja, warum sollten Sie überhaupt '__ all__' definieren? Und wie wird '__all__ = [' get_includes '] + core .__ all__' bei einem 'import *' ausgewertet? – Pablo
von bla import * ist keine gute Gewohnheit, aber es gibt einige Module, für die das im Allgemeinen sicher ist. Ich mache routinemäßig aus Mathe-Import *. Die Dokumentation dieser Module weist oft darauf hin, dass sie so konzipiert sind, dass sie so verwendet werden können und dass sie Feinheiten wie __all__ unterstützen, um es ein wenig einfacher zu machen. Aber von ximport * ist immer noch etwas zu verwenden mit Vorsicht und nur mit Paketen, wo Sie wissen, dass es kein Problem verursacht. – TimothyAWiseman