Adding code to __init__.py(将代码添加到 __init__.py)
问题描述
我正在查看 django 中的模型系统是如何工作的,我发现了一些我不明白的地方.
I'm taking a look at how the model system in django works and I noticed something that I don't understand.
我知道你创建了一个空的 __init__.py
文件来指定当前目录是一个包.并且您可以在 __init__.py
中设置一些变量,以便 import * 正常工作.
I know that you create an empty __init__.py
file to specify that the current directory is a package. And that you can set some variable in __init__.py
so that import * works properly.
但是django在__init__.py
中添加了一堆from ... import ...语句并定义了一堆类.为什么?这不是让事情看起来很乱吗?__init__.py
中是否有需要此代码的原因?
But django adds a bunch of from ... import ... statements and defines a bunch of classes in __init__.py
. Why? Doesn't this just make things look messy? Is there a reason that requires this code in __init__.py
?
推荐答案
当你导入包含它的包(目录)时,__init__.py
中的所有导入都可用.
All imports in __init__.py
are made available when you import the package (directory) that contains it.
例子:
./dir/__init__.py
:
import something
./test.py
:
import dir
# can now use dir.something
忘了提一下,__init__.py
中的代码在您第一次从该目录导入任何模块时运行.所以它通常是放置任何包级初始化代码的好地方.
forgot to mention, the code in __init__.py
runs the first time you import any module from that directory. So it's normally a good place to put any package-level initialisation code.
dgrant 在我的示例中指出了可能的混淆.在 __init__.py
import something
可以导入任何模块,不需要从包中导入.例如,我们可以将其替换为 import datetime
,然后在我们的顶级 test.py
中,这两个片段都可以工作:
dgrant pointed out to a possible confusion in my example. In __init__.py
import something
can import any module, not necessary from the package. For example, we can replace it with import datetime
, then in our top level test.py
both of these snippets will work:
import dir
print dir.datetime.datetime.now()
和
import dir.some_module_in_dir
print dir.datetime.datetime.now()
底线是:在 __init__.py
中分配的所有名称,无论是导入的模块、函数还是类,在您导入包或包中的模块时自动在包命名空间中可用.
The bottom line is: all names assigned in __init__.py
, be it imported modules, functions or classes, are automatically available in the package namespace whenever you import the package or a module in the package.
这篇关于将代码添加到 __init__.py的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:将代码添加到 __init__.py


- 计算测试数量的Python单元测试 2022-01-01
- ";find_element_by_name(';name';)";和&QOOT;FIND_ELEMENT(BY NAME,';NAME';)";之间有什么区别? 2022-01-01
- YouTube API v3 返回截断的观看记录 2022-01-01
- 使用公司代理使Python3.x Slack(松弛客户端) 2022-01-01
- 检查具有纬度和经度的地理点是否在 shapefile 中 2022-01-01
- 我如何透明地重定向一个Python导入? 2022-01-01
- 使用 Cython 将 Python 链接到共享库 2022-01-01
- 我如何卸载 PyTorch? 2022-01-01
- CTR 中的 AES 如何用于 Python 和 PyCrypto? 2022-01-01
- 如何使用PYSPARK从Spark获得批次行 2022-01-01