0

重複の可能性:
Python: 循環 (または循環) インポート

私は Python を初めて使用し、問題を抱えていますが、これが私の問題であるかどうかは正確にはわかりません。user.py と comments.py の 2 つのファイルがあります。user.py では、私は

from comments import Comment

そしてcomments.pyで私はそうします

from user import User

ユーザーは正常に読み込まれますが、コメントにつながる URL を読み込むと、サーバー エラーが発生します。コメントアウトするfrom comments import Commentと問題が解決します。私は何か間違ったことをしていますか?

4

2 に答える 2

1

はい、循環インポートがあり、それらは多くの問題を引き起こします。インポート時に実際に何が起こっているかを考えると、「ファイル x からこのファイルにコードをコピーする」と言うのに似ていますが、x から y にコピーしてから y から x に戻すと、インタプリタが、どのモジュールがどの状況でどのモジュールに取って代わられるか、またはどのモジュールをロードするかを理解することが困難または不可能な無限ループ。ただし、プログラムが適切に設計されている場合は、必要ありません。この循環インポートを行う理由は何ですか? 問題をもう少し注意深く見ると、実際にはまったく必要ない可能性があります。

于 2012-04-16T22:26:13.800 に答える
1

この種の循環インポートは機能しません。モジュールのインポートとは、基本的にモジュール内のステートメントを実行することを意味します。ステートメントは検出された瞬間に実行されるimportため、少なくとも 1 つのモジュールで他のモジュールがまだ初期化されていないため、インポートは失敗します。

循環依存はアンチパターンと見なされます。どういうわけか自然に発生する状況もありますが、一般的には悪い設計の兆候です。

import ステートメントの 1 つをモジュールの末尾または関数レベルに移動することで、おそらくこれを機能させることができますが、これらの「修正」には反対することをお勧めします。

于 2012-04-16T22:27:19.817 に答える