问题:
在 Python 3.3 中,是否还需要有 __init__。导入时的py文件包吗?
答案:
不一定。 Python 3.3 引入了“隐式命名空间包”的概念,允许在没有 __init__.py 文件的情况下创建包。这些被称为命名空间包,与具有 __init__.py 文件的常规包相反。
隐式命名空间包用例:
命名空间包是专门使用的当多个库驻留在不同位置并且需要将子包贡献给同一个父包时。例如,考虑以下结构:
google_pubsub/ # Package 1 google/ # Namespace package cloud/ # Namespace package pubsub/ # Regular package __init__.py foo.py google_storage/ # Package 2 google/ # Namespace package cloud/ # Namespace package storage/ # Regular package __init__.py bar.py
如果没有命名空间包,导入“google_pubsub”和“google_storage”都会失败,因为 Python 将常规包视为独立实体。通过从“google”和“google/cloud”目录中删除 __init__.py 文件,它们将被解释为命名空间包,从而允许 Python 解释器查找并向“google”包贡献模块和子包。
常规包与命名空间包:
在大多数情况下,建议通过使用空来坚持使用常规包__init__.py 文件。这是因为:
结论:
虽然命名空间包在特定场景中可能有用,但它们应该谨慎使用。对于大多数开发人员和用例,建议使用带有 __init__.py 文件的常规包。仅当确实需要在包含子包的多个目录之间共享命名空间时才考虑命名空间包。
参考文献:
以上是Python 3.3 中的包需要 `__init__.py` 文件吗?的详细内容。更多信息请关注PHP中文网其他相关文章!