私はPythonの基本的な理解を持っていますが、次の構文を使用してモジュールをインポートすると、_(単一のアンダースコア)で始まる指定されたモジュールで定義された属性をインポートしないことをどこかで読んだことがあります。それがどのように起こっているのか、なぜそうなのか誰か教えてもらえますか?
from module.submodule import *
私はPythonの基本的な理解を持っていますが、次の構文を使用してモジュールをインポートすると、_(単一のアンダースコア)で始まる指定されたモジュールで定義された属性をインポートしないことをどこかで読んだことがあります。それがどのように起こっているのか、なぜそうなのか誰か教えてもらえますか?
from module.submodule import *
それは設計によるものです。アンダースコアで始まる変数は、内部使用のみと見なされます (他の言語のプライベートとは異なります)。モジュールで直接アクセスすることはできますが、インポートでは*
インポートされません。
インポートに関するドキュメントから:*
これにより、アンダースコア (_) で始まる名前を除くすべての名前がインポートされます。ほとんどの場合、Python プログラマーはこの機能を使用しません。これは、未知の名前のセットをインタープリターに導入し、既に定義したものを隠してしまう可能性があるためです。
これはまた、必要なものを明示的にインポートする方がよい * インポートを使用することはお勧めできません。例外は* import 経由で使用するように設計され__all__
たモジュールです。つまり、属性 (モジュールがエクスポートするすべての名前を含むリスト) があります。