情景:
dirA/
__init__.py
file1.py
file2.py
dirB/
__init__.py
file11.py
file22.py
dirC/
__init__.py
file111.py
file222.py
我在https://docs.python.org/2/tutorial/modules.html#tut-standardmodules上读到,相反,在使用import item.subitem.subsubitem之类的语法时,除了最后一项之外的每个项都必须是一个包;最后一项可以是模块或包,但不能是上一项中定义的类或函数或变量。
现在由于上面的阅读,我有一些疑问:
当我写import dirA.dirB时,这个语句是否也在dirC包中导入模块,或者只导入dirB中的模块?
import dirA.dirB 的用途是什么,因为当我使用此语句时,仍然无法使用dirB子包内的模块
我知道要使用dirB中的模块我必须使用 import dirA.dirB.file11
答案 0 :(得分:1)
当您执行import dirA.dirB
时,您只导入包dirB
,这意味着您基本上导入__init__.py
下的dirB.py
,如果__init__.py
正在定义某些函数或类等,您可以在导入dirA.dirB
之后使用它们。
示例 -
我的目录结构 -
共享/ a.py 包装/ 的初始化强>的.py b.py
现在在pkg/__init__.py
,我有 -
x = 1
import pkg.b
我的pkg/b.py
是 -
a = 1
现在在a.py
,我可以做 -
import pkg
print(pkg.b.a)
print(pkg.x)
这样可行,因为__init__.py
已导入pkg.b
,因此可以使用pkg.b.a
访问它。
答案 1 :(得分:0)
当您使用from dirA import dirB
时,dirB
将是一个模块,其中包含dirB/__init__.py
中定义或导入的任何内容(变量,函数等)。
这通常用于制作" public" dirB
的组件易于访问。例如,您可能有:
from .file11 import Foo
from .file22 import Bar
因此,您图书馆的用户只需致电:
from dirA.dirB import Foo, Bar
而不必记住哪个文件定义Foo
和Bar
。