Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python _uuuinit_uuuuu.py的目的。或者:为什么把代码放在_init__u; py而不是模块中?_Python_Django - Fatal编程技术网

Python _uuuinit_uuuuu.py的目的。或者:为什么把代码放在_init__u; py而不是模块中?

Python _uuuinit_uuuuu.py的目的。或者:为什么把代码放在_init__u; py而不是模块中?,python,django,Python,Django,我正在检查Django的代码。它有以下软件包: ➜ django pwd /Users/ugur/.virtualenvs/evernote/lib/python3.6/site-packages/django ➜ django tree -L 1 . ├── __init__.py ├── __main__.py ├── __pycache__ ├── apps ├── bin ├── conf ├── contrib ├── core ├── db ├── dispatch ├── fo

我正在检查Django的代码。它有以下软件包:

➜  django pwd
/Users/ugur/.virtualenvs/evernote/lib/python3.6/site-packages/django
➜  django tree -L 1
.
├── __init__.py
├── __main__.py
├── __pycache__
├── apps
├── bin
├── conf
├── contrib
├── core
├── db
├── dispatch
├── forms
├── http
├── middleware
├── shortcuts.py
├── template
├── templatetags
├── test
├── urls
├── utils
└── views
现在,我深入到
db/
中的包中,试图理解其结构

例如,我在创建模型时经常使用的类有:

  • models.CharField
  • models.TextField
  • models.IntegerField
在尝试查看他们的代码时,我惊讶地发现他们出现在:

db/models/fields/\uuuu init\uuuuu.py

查看该
\uuuu init\uuuuuuuy.py
文件,我发现超过2300行代码

我使用
\uuuuu init\uuuuuuuuuupy.py
文件向解释器指示文件夹是由模块组成的包

另外,通过
dir(myobject)
检查对象的属性,我可以看到
\uuuuuuuuuuuuuuuuuuu文件
属性指向
\uuuuuuuuu init.py
文件。例如
dir(django)


此文件的用途是什么?

假设您有以下布局:

my_package/
   __init__.py
   my_module.py
然后,一个空白的
\uuuuu init\uuuuuu.py
将要求您编写

 import my_package.my_module
 my_package.my_module.hello()
但是,您可以将可执行代码放入
\uuu init\uuuuuuuu.py
中,只要导入我的\u包,即可执行

例如,如果你把

 # __init__.py
 import my_module
进入
\uuuu init\uuuuu.py
后,您现在可以简化导入:

 import my_package
 my_package.my_module.hello()
您还可以进一步修改
\uuuu init\uuuu.py

 # __init__.py
 from my_module import hello
所以

 import my_package
 my_package.hello()

有效。

回答得很好!非常感谢。
 import my_package
 my_package.hello()