Ich hoffe, dass jemand Einblick in einige zusätzliche Namensbindungen geben kann, die Python3 während eines Imports erstellt. Hier ist der Testfall:Python - Unerwarteter Import Occuring
Ich erstellte ein Testpaket namens "Spam" (original, ich weiß). Es enthält 3 Dateien wie folgt:
Die Inhalte der Dateien sind wie folgt:
__init__.py:
from .foo import Foo
from .bar import Bar
foo.py:
def Foo():
pass
bar.py:
def Bar():
pass
Ziemlich einfache Sachen. Wenn ich das "Spam" -Paket importiere, kann ich sehen, dass es Namensbindungen zu den Foo() und Bar() Funktionen im 'spam'-Namespace erstellt, die erwartet wird. Was nicht erwartet wird ist, dass es auch einen Namen an die "foo" und "bar" Module im 'spam' Namespace bindet, wie unten gezeigt.
Was ist noch interessanter ist, dass diese zusätzlichen Namensbindungen an das Modul nicht auftreten, wenn ich die Foo() und Bar() Funktionen in Haupt importieren, wie unten dargestellt:
Lesen Sie die Dokumentation über die Import-Anweisung (Sprache Ref und Tutorial), ich sehe nichts, was dazu führen würde.
Kann jemand etwas beleuchten, warum, wenn eine Funktion von einem Modul in einem Paket importiert wird, es auch einen Namen an das Modul bindet, das die Funktion enthält?
Danke für diese detaillierte Antwort. Ich fand es gut angelegt. Ich denke, dass das folgende Zitat es nagelt: * "Außerdem stellt der Importprozess alle Untermodule zu einem Paket im Modulnamenraum, der in diesem Paket sichtbar ist, her - das ist der Grund, warum die Namen" foo "und" bar "sichtbar sind in deinem Spam-Paket. "* Weißt du irgendeinen Platz in der Dokumentation, die das ausspricht? Oder haben Sie etwas gefunden, indem Sie den Quellcode gelesen haben? – MACS