換句話說,使用foo
我需要進口一切都交給foo
,如:在Python中,爲什麼我不能這樣做:import A; ABCfoo()
from A.B.C import foo
或至多
from A.B import C
C.foo()
但我不能這樣做:
from A import B
B.C.foo()
這給了我一些像'module' object has no attribute "C"
。
換句話說,使用foo
我需要進口一切都交給foo
,如:在Python中,爲什麼我不能這樣做:import A; ABCfoo()
from A.B.C import foo
或至多
from A.B import C
C.foo()
但我不能這樣做:
from A import B
B.C.foo()
這給了我一些像'module' object has no attribute "C"
。
文檔解釋了爲什麼:http://docs.python.org/tutorial/modules.html
每個模塊都有自己的專用符號表,被用作由模塊中定義的所有功能 全局符號表。因此,模塊的作者可以在模塊中使用全局變量,而不用擔心與用戶的全局變量發生意外衝突。另一方面,如果你知道自己在做什麼,你可以觸摸一個 模塊的全局變量,使用相同的符號來表示它的 函數modname.itemname。
http://docs.python.org/tutorial/classes.html#python-scopes-and-namespaces:
嚴格地說,在模塊名稱的引用是屬性 引用:在表達式modname.funcname中,modname是一個模塊 對象和funcname是它的一個屬性。在這種情況下,發生 是模塊屬性和模塊中定義的全局名稱之間的直接映射:它們共享相同的名稱空間!
因此,簡單的B.C沒有被導入,並且在最後一個例子中是未知的。 但是這將工作:
from A import B.C
B.C.foo()
你*可*做你想做的 - 如果模塊筆者構建自己的代碼的方式允許它。 – Daenyth
B是一個文件夾,是否有__init \ _ \ _。py文件? –
[在Python中導入包]可能的重複(http://stackoverflow.com/questions/9048518/importing-packages-in-python) – Ben