はい、すべてのモジュールに必要なものをすべてインポートする必要があります。で定義されmodule_a
た関数を使用する場合は、内部にインポートするか、少なくともから関数をインポートする必要があります。B
module_b
module_b
module_a
B
module_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!