まず、パッケージのディレクトリ構造を見てください:
一番外側のパッケージの名前は Msgnew で、これには init ファイルが含まれています。get というモジュールと Msg というサブパッケージがあります。Msg サブパッケージに入ると、init ファイルと、 2 つのモジュールがあり、1 つは Sendmsg と呼ばれ、もう 1 つは Receivemsg モジュールと呼ばれます
ここで、サブパッケージ内の Sendmsg モジュールをインポートし、関数の 1 つを使用したいと思います。
ところで、Sendmsg モジュールを紹介します。図に示すように、実際には 3 つの関数です。
インポート プロセスのコードは次のとおりです:
リーリーコード 1 とコード 2 は次のとおりです。
コード 1 の実行結果は次のとおりです。
次に、コード 1 をコメント アウトして、コード 2 を実行します。結果は次のようになります。
これはよくわかりません、
#赤いボックス内の 2 つのコードは等価ではありませんか?
私の意見では、これら 2 つは同じ意味であるはずですが、なぜ一方が間違っていて、もう一方が正しいのでしょうか?
大家讲道理2017-06-30 09:56:57
これらはすべてサブモジュールですが、実装ロジックは実際には異なります。そのため、最終的なインポートはパーサーに Sendmsg ファイルの場所を指示する Python
文件,而并非一个模块目录,所以代码二中import Sendmsg
部分才是真正的引入了这个Python文件,而前面的from Msgnew.Msg
でなければならないという事実につながります。
某草草2017-06-30 09:56:57
私は自分が遭遇した問題がどこにあるのかを知っています。
インポートがモジュールではなくパッケージである場合、内部のモジュールを一緒に直接インポートしたい場合は、パッケージのinitファイルに次のように記述する必要があります:
写真に示すように:
次回実行すると成功します!