ホームページ > バックエンド開発 > Python チュートリアル > Python での循環インポートはどのように回避できますか?またその結果は何ですか?

Python での循環インポートはどのように回避できますか?またその結果は何ですか?

Susan Sarandon
リリース: 2024-12-18 05:44:14
オリジナル
806 人が閲覧しました

How Can Circular Imports in Python Be Avoided and What Are Their Consequences?

Python での循環インポートの結果

循環インポートは、2 つ以上のモジュールが相互にインポートしようとすると発生します。単純なインポートはスムーズに機能する可能性がありますが、モジュールが、同じくインポートしようとしている別のモジュールから特定の名前または属性をインポートしようとすると、問題が発生します。

問題: 直接循環インポート

直接循環インポートでは、モジュールは直接 import ステートメントを使用して全体として相互にインポートを試みます。例:

# foo.py
import bar

# bar.py
import foo
ログイン後にコピー

最初は、両方のモジュールが問題なくロードされます。ただし、一方のモジュールが、もう一方のモジュールを完全にロードする必要がある名前にアクセスしようとすると、ランタイム エラーが発生する可能性があります。

解決策: 間接循環インポート

ランタイム エラーを回避するには、次を使用します。間接インポート。モジュールはモジュール全体ではなく属性または特定の名前をインポートします。例:

# foo.py
from bar import xyz

# bar.py
from foo import abc
ログイン後にコピー

このアプローチでは、両方のモジュールが必要な属性を完全にロードすることなくインポートできます。

例外: Python 2 および特定のシナリオ

Python 2 は、循環インポートに関してわずかに異なる動作を示します。モジュールの先頭からインポートする場合、「from」を使用せず、相対インポートのみを使用する場合など、特定の特定のシナリオでは、循環インポートは Python 2 では機能する場合がありますが、Python 3 では機能しない場合があります。

追加の例

次の例は、Python で循環インポートが許可される追加のシナリオを示しています:

  • モジュールの下部、インポートモジュールではなく属性。 "from" import
  • 関数の先頭; "from" import
  • モジュールの先頭; 「から」インポートはOKです。比較的大丈夫。 Python 3 のみ

以上がPython での循環インポートはどのように回避できますか?またその結果は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート