我可以使用空白__init__.py
文件从子目录导入。这很好。我认为python中的init文件就像一个索引文件。但我真的不明白为什么导入__init__.py
文件为空。 __init__.py
文件和导入如何真正起作用?
什么是__init__.py
个文件内容?
答案 0 :(得分:2)
__init__.py
有两个主要功能:
标记包:它将目录标记为Python 包,将内部.py
文件标记为Python 模块
初始化代码:顾名思义,导入包时会自动执行__init__.py
中的所有代码。这是运行某个包所需的初始化代码的正确位置;但是,将__init__.py
文件留空是完全可以的。
答案 1 :(得分:1)
如果文件中包含__init__.py
文件,则从中导入的子目录是包。您不需要使用包,只需将子目录添加到sys.path
列表即可。然而,它们是将相关模块保持在一起的一种巧妙方式,并且通常受到鼓励。
__init__.py
文件与类中__init__
的目的相似,它初始化包。这样可以将属性赋予包,__all__
就是一个示例(import *
的导出名称列表)。
有时不需要初始化,因此它可以为空。查找示例的好地方是Lib
目录的标准库子目录。在那里你会发现巨大的__init__.py
个文件,以及其他空的文件。
这是否强制取决于Python版本。从Python 3.3开始,__init__.py
不是必需的,此类包称为命名空间包,请参阅PEP0420。这意味着一个包可以跨越目录,但需要付出代价。可能没有__init__.py
初始化代码,并且您没有获得包的__file__
属性。因此,除非您特别需要跨目录,否则最好坚持使用常规包。