- 1 前言
- 2 为什么有的文件夹下有 __ init__.py 而有的文件夹却没有?
- 3 __ init__.py 意味着什么?
- 3.1. 与包(package)的分类有关
- 4 如何创建 __ init__.py?
- 5 __ init__.py 的作用汇总
- 5.1 包的标识
- 5.2 执行包的初始化代码
- 5.3 设置 __ all__ 变量
- 6 总结
1 前言
提示:这里可以添加本文要记录的大概内容:
Spyder 和 PyCharm都用,但经常会出现这样的情况:一个脚本文件在 Spyder 里写成的,到 PyCharm 就会报错。常遇见的错误无非就是 ModuleNotFoundError、KeyError、ImportError。由此,翻看了大量的程序员笔记,也查看了 Python 官方文档,从官方定义中了解到 __init __.py 这个文件的一些作用,在此分享。
2 为什么有的文件夹下有 __ init__.py 而有的文件夹却没有?
用 PyCharm 会在创建新文件夹时给出两种选择:Directory & Python package。Directory 被创建之后,无__init__.py,而 Python package 被创建之后,有__init__.py。同时,Python package 被创建之后,文件夹图标上有一个圆点。
不过用 Spyder 创建文件夹,既不会有图标上的圆点,也不会自动创建 __ init__.py。
3 __ init__.py 意味着什么? 3.1. 与包(package)的分类有关Python 区分了两种类型的包: Regular packages 常规包 和 Namespace packages 命名空间包。常规包通常以一个包含 __ init__.py 文件的目录形式实现。当一个常规包被导入时,这个 __ init__.py 文件会被隐式地执行,它所定义的对象会被绑定到该包命名空间中的名称。命名空间包没有 parent/__ init__.py 文件。
4 如何创建 __ init__.py?我现在已经习惯了,用 PyCharm 创建文件夹,带圆点和 __ init__.py,用 Spyder 编写脚本。其实,也可以手动创建:新建文本文件,再修改其名称为 __ init__.py。
5 __ init__.py 的作用汇总 5.1 包的标识空文件即可。Python 只把含 __init __.py 文件的目录当成包。这样可以防止以 string 等通用名称命名的目录,无意中屏蔽出现在后方模块搜索路径中的有效模块。 最简情况下,__init __.py 只是一个空文件。
换句话说,如果 __ init__.py 不存在,这个目录就仅仅是目录,而不是包,也就不能被导入或者包含其它模块和嵌套包。
5.2 执行包的初始化代码如果你在导入 tkinter 时,打开过它的 __ init__.py,体会就更深了!
5.3 设置 __ all__ 变量__ init__.py 在包被导入时会被执行。所以,就可以用于在其中指定默认需要导入的模块。尤其是当一个包中有很多 .py 脚本文件,那么就可以把外部可以访问的模块文件名称放在 __ all__ 变量里。推荐这一篇!
6 总结
__ init__.py 有必要存在。创建文件夹还是应该有这个文件,尽管可能不知道应该怎么用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)