ホームページ > バックエンド開発 > Python チュートリアル > Python で循環インポート エラー (「ImportError」および「AttributeError」) を解決する方法は?

Python で循環インポート エラー (「ImportError」および「AttributeError」) を解決する方法は?

Susan Sarandon
リリース: 2024-12-12 16:45:11
オリジナル
135 人が閲覧しました

How to Solve Circular Import Errors (

循環インポートの問題の解決: "ImportError" と "AttributeError"

Python では、モジュールが相互にインポートしようとすると循環インポートが発生し、依存関係ループが作成されます。これにより、「ImportError: Cannot import name X」または「AttributeError」エラーが発生する可能性があります。

モジュール main.py、entity.py、physics.py がそれぞれからインポートされる特定のケースでこれらの問題を解決するにはその他の場合は、次の回避策を検討してください:

物理的に並べ替えるImports:

entity.py の物理学のインポート ステートメントをクラス Ent の定義の前に移動します:

# entity.py
from physics import Physics

class Ent:
    ...
ログイン後にコピー

これにより、Ent が定義される前に物理学が読み込まれるようになります。循環依存関係を排除します。

Sentinelガード:

各モジュールに、インポートされたモジュールが既にインポートされているかどうかを確認するセンチネル ガードを追加します。存在する場合は、それ以上インポートを実行せずに単に戻ります。これにより、複数のインポート試行が防止され、循環ループが解消されます。

# main.py
try:
    from entity import Ent
except ImportError:
    pass

# entity.py
try:
    from physics import Physics
except ImportError:
    pass

# physics.py
try:
    from entity import Ent
except ImportError:
    pass
ログイン後にコピー

遅延読み込み:

遅延読み込みを実装して、実際に必要になるまでインポートを遅らせます。スクリプトの開始時にモジュールをインポートする代わりに、インポートを特定の関数またはメソッドまで延期します。これにより、必要な場合にのみインポートが行われるようにすることで、循環依存関係を解消できます。

# main.py
def import_entity():
    if not _entity_imported:
        from entity import Ent
        _entity_imported = True

# entity.py
def import_physics():
    if not _physics_imported:
        from physics import Physics
        _physics_imported = True
ログイン後にコピー

これらの戦略を採用することで、循環インポートの問題を効果的に解決し、Python コード内の関連エラーを回避できます。

以上がPython で循環インポート エラー (「ImportError」および「AttributeError」) を解決する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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