はい、すべてのモジュールに必要なものをすべてインポートする必要があります。で定義されmodule_aた関数を使用する場合は、内部にインポートするか、少なくともから関数をインポートする必要があります。Bmodule_bmodule_bmodule_aBmodule_b
説明:
Pythonではモジュールはオブジェクトです!モジュールをインポートすると、そのコードが実行され、そこで定義されるすべてのものがモジュールオブジェクトの__dict__:にアタッチされます。
$ echo 'a=1' > testing.py
$ python
Python 2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import testing
>>> 'a' in testing.__dict__
True
モジュール__dict__には、通常のグローバルビルトインも含まれています。モジュール内で定義されているものはすべて、モジュール__dict__をグローバルスコープとして使用します。Pythonには、すべてのモジュール/クラス/関数からアクセス可能な変数を意味する「グローバル変数」のようなものはありません。グローバル変数は、実際にはモジュールのインスタンス変数にすぎません。
モジュールから他のモジュールの名前空間にいくつかのアイテムをインポートする場合は、次のfrom構文を使用できます。
from module_a import functionA, functionB, classA, CONSTANT
*:を使用してすべてをインポートできます。
from module_a import *
ただし、from ... import *構文の使用は避けてください。Cインクルードのように名前空間の衝突が発生します。これは、モジュールがドキュメントに*-importsafeであると記載されている場合にのみ実行してください。モジュールを*-importセーフにするために、グローバルを定義できます。これは、 -importの実行__all__時にエクスポートする必要がある識別子を表す文字列のシーケンスである必要があります。*
例えば:
#module_a
A = 1
B = 2
__all__ = ['A']
#module_b
from module_a import *
print(A) #okay
print(B) #NameError, B was not exported!