循環インポートは、2 つ以上のモジュールが相互にインポートしようとすると発生します。単純なインポートはスムーズに機能する可能性がありますが、モジュールが、同じくインポートしようとしている別のモジュールから特定の名前または属性をインポートしようとすると、問題が発生します。
直接循環インポートでは、モジュールは直接 import ステートメントを使用して全体として相互にインポートを試みます。例:
# foo.py import bar # bar.py import foo
最初は、両方のモジュールが問題なくロードされます。ただし、一方のモジュールが、もう一方のモジュールを完全にロードする必要がある名前にアクセスしようとすると、ランタイム エラーが発生する可能性があります。
ランタイム エラーを回避するには、次を使用します。間接インポート。モジュールはモジュール全体ではなく属性または特定の名前をインポートします。例:
# foo.py from bar import xyz # bar.py from foo import abc
このアプローチでは、両方のモジュールが必要な属性を完全にロードすることなくインポートできます。
Python 2 は、循環インポートに関してわずかに異なる動作を示します。モジュールの先頭からインポートする場合、「from」を使用せず、相対インポートのみを使用する場合など、特定の特定のシナリオでは、循環インポートは Python 2 では機能する場合がありますが、Python 3 では機能しない場合があります。
次の例は、Python で循環インポートが許可される追加のシナリオを示しています:
以上がPython での循環インポートはどのように回避できますか?またその結果は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。