Dan*_*nov 6 python coding-style
请考虑以下情形:
你有一个模块M中定义m.py包含一个函数f.
它可以像这样调用:
import M;
M.f()
Run Code Online (Sandbox Code Playgroud)模块增长到一个大小,在单个文件中是不切实际的.您拆分M成子模块M.X,M.Y,M.Z并把在下面M/__init__.py:
from .X import *
from .Y import *
from .Z import *
__all__ = ["f"]
Run Code Online (Sandbox Code Playgroud)
原始代码仍然有效:
import M;
M.f()
Run Code Online (Sandbox Code Playgroud)但是,代码的新消费者可能会错误地直接访问子模块:
import M.X;
M.X.f()
Run Code Online (Sandbox Code Playgroud)
我想阻止这种情况,这样所有代码仍然可以直接解决M,而不是任何子模块.
子模块是为了内部代码组织的利益,并且引用M使得将来可以轻松重组.
一种选择是命名的子模块_X,_Y以及_Z沟通,他们是内部的.这是推荐的方法吗?
小智 1
一种选择是将子模块命名为 _X、_Y 和 _Z 以表明它们是内部的。这是推荐的方法吗?
由于您不希望人们访问 MX,因此您需要移动 X.py 模块,以便它不再作为 MX 可用。您可以按照 Kaie 的建议删除它,但是呃。因此,是的,您的建议是推荐的方法。
搬去M/X.pyM/_X.py
在M/__init__.py有线from ._X import f
正如其他人所建议的那样,人们可以访问代码实际上不应该成为问题,并且使用具有更强封装性的语言进行编程的习惯渗透到了 Python 设计中。
子模块是为了内部代码组织的利益,引用M为将来轻松重组留下了可能性。
是的,这是我在使用 C 和 C++ 并整天处理 ABI 时所担心的问题。但如果代码很小并且经过充分测试,这通常不是问题。这是一种稍后可以轻松修复的问题。如果有一天您决定重新组织代码,X那么_X我相信 Jenkins 可以告诉您还需要更新哪些内容。:)
| 归档时间: |
|
| 查看次数: |
191 次 |
| 最近记录: |