__init__.py 中的类实现

3

我一直在研究__init__.py文件,并且发现推荐在那里处理包的导入和/或一些初始化。

然后有一个像Python的包Collections。该__init__.py包含不同Collection对象的实现。

为什么要将实现放在__init__.py中,而不是专门的.py文件中? 这是一个好主意吗? 这是一种设计模式吗?

1个回答

2
在这种情况下,其实不需要在包目录下建立__init__.py文件,因为该模块中唯一的其他文件是abc.py,它本身并未定义任何东西。所以如果没有abc.py,整个模块只需命名为collections.py而不是collections/__init__.py。那么为什么还是这样呢?纯粹出于向后兼容的原因。他们不想破坏from collections.abc import ...这样的用法,但想在内部移动一些东西。

1
你有没有一般性的想法,不是关于这个特定的collections案例? - sanyassh
在我看来,这通常不是一个可怕的想法。你只需要小心循环导入,例如当子模块从__init__.py导入一些基类时,但是__init__.py也导入了那些子模块以暴露它们。 - deceze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接