init.py 是在里面写__all__=[""]用来导入包的,函数或类写在同一个包的其他文件里。 但我看了 django 的源码,他有些包,会把一些函数或者类也写在__init__.py 所以我想问,把函数或者类写在__init__.py 有什么特殊含义或者用法么?
1
Etuloser 2019-07-23 09:51:49 +08:00
你在导入这个模块的时候 实际是在导入 __init__.py 文件
|
2
HelloAmadeus 2019-07-23 09:52:08 +08:00 via iPhone
没有,而且不推荐这样做。和普通.py 文件的唯一区别就是导入路径
|
3
tabris17 2019-07-23 09:53:49 +08:00
没有特殊含义
用 __all__ 导出仅仅是针对 from xxx import * 而已 |
4
dinjufen 2019-07-23 10:00:51 +08:00
一个文件夹包含__init__.py 就成了 Python 包,可以用 import、from... import ...导入
|
5
Vegetable 2019-07-23 10:01:39 +08:00
没什么特殊的含义。
同样不建议在这里边写代码,不好组织代码。容易出现交叉引用的情况。 |
6
secsilm 2019-07-23 10:02:41 +08:00
__init__.py 在 python3 里已经不需要了
|
7
chaleaochexist 2019-07-23 10:28:57 +08:00
|
8
hmxxmh 2019-07-23 10:31:04 +08:00
模块与包的区别,新建一个文件夹有 init 的就是包,你可以在新建的时候选择 package 看下
|
9
chaleaochexist 2019-07-23 10:32:57 +08:00
@secsilm 找到了谢谢.
|
10
secsilm 2019-07-23 10:54:00 +08:00 1
@secsilm 严格来说是 Python 3.3 之后空的 __init__. py 不需要了。见 [PEP 420]( https://www.python.org/dev/peps/pep-0420/)
|
14
secsilm 2019-07-26 13:18:28 +08:00
@frostming 我感觉我说的那句没问题,有了 namespace packages,空的 __init__.py 确实不需要了。但如果在某文件夹发现了 __init__py,仍然会当作是 regular package ( 3.2 及之前版本实现的 package )。
|
15
frostming 2019-07-26 15:19:34 +08:00
@secsilm Namespace package 是 python 包分发的概念,这个 package 是代码组织的概念,无论是不是 3.2 以后都是要__init__.py ,不然你都 import 不了
|
16
secsilm 2019-07-26 16:14:38 +08:00 via Android
|
17
frostming 2019-07-26 20:37:40 +08:00
|