为什么Django包含很多'__init__.py'文件?
在一个Django项目中,很多文件夹里都有一个叫做__init__.py
的文件。我觉得这个文件是用来初始化某些东西的。那么,这个__init__.py
文件到底是用来干嘛的呢?
2 个回答
7
你的问题不太清楚。你到底想问什么呢?
这个文件 __init__.py
是用来让你的文件夹被认定为 一个包,这样你就可以做一些事情,比如:
from myapp.models import Something
11
Python并不会把每个目录下的每个子目录都当作一个包来处理,只有那些里面有一个叫做__init__.py
的文件的子目录才会被认为是包。来看下面这个命令行的例子:
$ mkdir adir
$ echo 'print "hello world"' > adir/helo.py
$ python -c 'import adir.helo'
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named adir.helo
$ touch adir/__init__.py
$ python -c 'import adir.helo'
hello world
你看到了吗?如果只有目录adir
,里面有一个模块helo.py
,那么尝试去import adir.helo
就会失败。但是如果在adir
里也有__init__.py
这个文件,那么Python就会知道adir
是一个包,这样导入就成功了。