gpt4 book ai didi

python - __init__.py 的用法

转载 作者:太空狗 更新时间:2023-10-29 22:11:39 35 4
gpt4 key购买 nike

当我执行 from myprojects.something import blabla 时,我使用 __init__.py 运行检查。

今天我开始使用 pyzmq 我想看看幕后发生了什么。所以我浏览了 github 中的代码,发现(对我而言)__init__.py 的一些奇怪用法,我无法解释自己。

例如zmq/core/__init__.py .在 zmq.core.__all__ 中添加 __all__ 的值 zmq.core.constants, zmq.core.error, zmq.core 有什么意义。消息等?

zmq/__init__.py我看到最后了

__all__ = ['get_includes'] + core.__all__

其中 get_includes 是一个函数,它基本上返回一个列表,其中包含模块目录和父目录中的 utils 目录。

那有什么意义呢? __init.py__ 通过这样做实现了什么?

最佳答案

__all__ 用于当有人执行 from module import * 时记录 here .

The only solution is for the package author to provide an explicit index of the package. The import statement uses the following convention: if a package’s __init__.py code defines a list named __all__, it is taken to be the list of module names that should be imported when from package import * is encountered. It is up to the package author to keep this list up-to-date when a new version of the package is released. Package authors may also decide not to support it, if they don’t see a use for importing * from their package. For example, the file sounds/effects/__init__.py could contain the following code:

__all__ = ["echo", "surround", "reverse"]

This would mean that from sound.effects import * would import the three named submodules of the sound package.

__all__ 的一个用途是包构建器的一种工具,允许他们以适合他们的方式构建包,同时方便用户。特别是在 pyzmq 的情况下,它允许您编写如下代码:

import zmq
print zmq.zmq_version()

不必使用完整的带点的模块名称:

print zmq.core.version.zmq_version()

pyzmq 的包设计者正在使用 __all__ 将命名空间元素从嵌套模块提升到其命名空间的顶层,这样用户就不会被其包的结构所困扰。

关于python - __init__.py 的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12521839/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com