首页 >后端开发 >Python教程 >Python 3.3 是否消除了包中对 __init__.py 的需要?

Python 3.3 是否消除了包中对 __init__.py 的需要?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-29 06:54:09450浏览

Does Python 3.3  Eliminate the Need for __init__.py in Packages?

Python 3.3 中的包不需要 __init__.py 吗?

Python 3.3 及更高版本引入了 命名空间包。此功能允许您创建没有 __init__.py 文件的包。

命名空间包与常规包

  • 命名空间包:没有 __init__.py 文件,允许多个模块跨不同的模块为同一个包做出贡献
  • 常规包:有一个 __init__.py 文件,使它们独立并将其模块隔离到单个目录层次结构。
何时使用命名空间包

主要用例命名空间包是指您有多个库驻留在不同位置,并希望它们向父包贡献一个子包。

例如:

google_pubsub/
google/                 <- Namespace package (no __init__.py)
    cloud/              <- Namespace package (no __init__.py)
        pubsub/         <- Regular package (with __init__.py)
            __init__.py <- Required to make the package a regular package
            foo.py
google_storage/
google/                 <- Namespace package (no __init__.py)
    cloud/              <- Namespace package (no __init__.py)
        storage/        <- Regular package (with __init__.py)
            __init__.py <- Required to make the package a regular package
            bar.py

在此示例中,google_pubsub 和 google_storage 共享相同的 google/cloud 命名空间。这允许您从任一库导入模块,而无需提供完整路径。

常规包

对于大多数用例,使用 __init__.py 文件创建常规包仍然是推荐的方法。这提供了自我包含并防止潜在的命名空间冲突。

以上是Python 3.3 是否消除了包中对 __init__.py 的需要?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn