ホームページ  >  記事  >  バックエンド開発  >  「AttributeError: \'module\' object has noattribute [duplicate]」が発生するのはなぜですか?

「AttributeError: \'module\' object has noattribute [duplicate]」が発生するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-20 12:55:02726ブラウズ

Why does

「属性エラー: 'モジュール' オブジェクトに属性 [重複] がありません」: 総合ガイド

このエラーは、Python モジュールが存在しない属性にアクセスします。あなたの特定のケースでは、エラーは「AttributeError: 'module' object has noattribute 'hi'」です。このエラーは、インポートしているモジュール (b.py) に「hi」という名前の関数がないことを示しています。

相互トップレベル インポートについて

この問題は、a.py と b.py の間で相互にトップレベルのインポートがあるために発生します。これは、循環インポートやその他の問題を引き起こす可能性があるため、通常は推奨されません。

問題の解決

このエラーを修正し、相互インポートを回避するには、次のようにインポートできます。関数内のモジュールは次のとおりです:

b.py の場合:

<code class="python">def cause_a_to_do_something():
    import a
    a.do_something()</code>

a.py の場合:

<code class="python">import b

def hello():
    print("hello")

print("a.py")
print(hello())
b.cause_a_to_do_something()</code>

このようにして、a.py はエラーを発生させることなく安全に b.py をインポートし、その関数を呼び出すことができます。

インポートの最適化

非効率的に見えるかもしれませんが、関数内でインポートしますが、実際にはそうではありません。 Python はインポートされたモジュールをキャッシュするため、インポート操作は関数を初めて呼び出すときにのみ実行されます。後続のインポートは迅速な操作です。

以上が「AttributeError: \'module\' object has noattribute [duplicate]」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。