Ich bin dankbar für diese Frage, denn die Antwort ist prägnant und gibt genau das benötigte Wissen. Die Dokumentation ist alles in Ordnung und gut, aber sie ist ausführlich und enthält viel mehr Informationen, als das OP verlangt hat, und sicherlich mehr, als ich brauchte. Ich wollte nur eine Antwort auf diese spezielle Frage, und die Antwort unten ist genau das, was ich wollte. Viele von uns brauchen einfach keine solchen formellen oder tiefgehenden Antworten.
Aha, wenn du also sagst, dass der Dateiname als Namespace behandelt wird, würdest du so etwas tun? "mymodule.var1" für den ersten Fall oder "myclass.var1" für den zweiten?
Dunkler Templer
1
Nicht genau. Das Paket zählt weiterhin als Teil des Namespaces. Wenn Sie das tun möchten, was Sie gesagt haben, müssen Sie mypackage import mymodule verwenden.
Yam Marcovic
Es kann nützlich sein, etwas über Namespace-Pakete hinzuzufügen, für die der Code nicht unbedingt alle in derselben Verzeichnisstruktur angezeigt werden muss.
Holdenweb
@holdenweb Nie die verschiedenen Mechanismen direkt genutzt, also kein Experte. Wenn Sie in einer neuen Antwort eine ausführliche Erklärung dazu geben, verweise ich von mir darauf.
Yam Marcovic
Wahrscheinlich ein bisschen zu esoterisch, um es wert zu sein, im Nachhinein
Antworten:
Ein Python-Modul ist einfach eine Python-Quelldatei, mit der Klassen, Funktionen und globale Variablen verfügbar gemacht werden können.
Beim Importieren aus einer anderen Python-Quelldatei wird der Dateiname als Namespace behandelt.
Ein Python-Paket ist einfach ein Verzeichnis von Python-Modulen.
Stellen Sie sich zum Beispiel den folgenden Verzeichnisbaum in vor
/usr/lib/python/site-packages
:Dann würden Sie tun:
oder
quelle