Heim  >  Fragen und Antworten  >  Hauptteil

[Python-Neuling] Gefragt nach dem Importieren verschachtelter Pakete

Schauen Sie sich zunächst die Verzeichnisstruktur meines Pakets an:

Der Name des äußersten Pakets ist Msgnew, das eine Init-Datei enthält. Es gibt ein Modul namens get und ein Unterpaket namens Msg. Sie können sehen, dass es auch eine Init-Datei gibt Es enthält 2 Module, eines heißt Sendmsg und das andere heißt Receivemsg-Modul

Ich möchte jetzt das Sendmsg-Modul in das Unterpaket importieren und eine seiner Funktionen verwenden
Lassen Sie mich übrigens das Sendmsg-Modul vorstellen, das tatsächlich drei Funktionen hat, wie in der Abbildung gezeigt:

Der Code für den Importvorgang lautet wie folgt:

# -*- coding:gb2312 -*-
# 代码1
from Msgnew import Msg
Msg.Sendmsg.test1()

# 代码2
#from Msgnew.Msg import Sendmsg
#Sendmsg.test1()

Hier sind Code 1 und Code 2
Das Ausführungsergebnis von Code 1 ist wie folgt:

Dann kommentieren Sie Code 1 aus und führen dann Code 2 aus. Das Ergebnis ist wie folgt:

Ich verstehe das nicht ganz,


Sind die beiden Codeteile im roten Feld nicht gleichwertig?
Meiner Meinung nach sollten diese beiden dasselbe bedeuten. Warum ist das eine falsch und das andere richtig?

phpcn_u1582phpcn_u15822667 Tage vor742

Antworte allen(2)Ich werde antworten

  • 大家讲道理

    大家讲道理2017-06-30 09:56:57

    虽然他们都是子模块,但是实际上他们的实现逻辑是不一样的,这样也就导致了,最终import进来的,必须是一个Python文件,而并非一个模块目录,所以代码二中import Sendmsg部分才是真正的引入了这个Python文件,而前面的from Msgnew.Msg则是告诉解析器到哪个位置去找Sendmsg文件。

    Antwort
    0
  • 某草草

    某草草2017-06-30 09:56:57

    我知道我自己遇到的这个问题出在哪儿了。
    当导入的不是模块,而是包的时候,如果想直接把里面的模块一起导入,必须在包的init文件里面写入:

    __all__ = ["Sendmsg","Receivemsg"]
    
    from . import Sendmsg
    from . import Receivemsg

    如图:

    接下来再执行的时候,成功!

    Antwort
    0
  • StornierenAntwort