Sve*_*ach 12 python module package
我希望某个模块的接口包含一定数量的函数和类(没有别的).我可以在一个文件中实现所有这些,并且可以轻松获得我想要的界面.但是,由于存在大量代码,我宁愿将整个内容分成几个文件,比如说
mypackage/
__init__.py
a.py
b.py
c.py
d.py
Run Code Online (Sandbox Code Playgroud)
为了获得所需的接口,无论如何,我定义__init__.py为进口所有公共符号从包文件a,b,c和d:
from a import func_a1, func_a2, ClassA1, ClassA2
from b import func_b1, func_b2, ClassB1, ClassB2
from c import func_c1, func_c2, ClassC1, ClassC2
from d import func_d1, func_d2, ClassD1, ClassD2
Run Code Online (Sandbox Code Playgroud)
如果我使用导入包
import mypackage
Run Code Online (Sandbox Code Playgroud)
包命名空间还包含符号a,b,c和d.这些名称是实现细节,而不是我的界面的一部分.我不希望它们显示为"公共"符号.摆脱它们的最佳方法是什么?
我考虑的选项是
使用单个模块而不是包.界面看起来很好,但实现将不如现在清晰.
添加行
del a, b, c, d
Run Code Online (Sandbox Code Playgroud)
到了最后__init__.py.工作正常,但似乎是一个黑客.(例如,你不能再import __init__这样了,没有这条线也可以.)
重命名a,b,c和d以_a,_b,_c和_d.现在它们mypackage作为"私有"符号被包含在命名空间中,我很好,但是我觉得有点奇怪,我的所有文件名都以下划线开头(实际上,当然有四个以上的子模块).
有更好的建议吗?或者想要选择哪个选项?
或者我只是肛门,不应该关心整个事情?
Eth*_*man 12
如果包中的某些文件确实是实现细节,请继续在它们前面加上下划线 - 这就是我们使用它们的原因.
例如,如果你看,ctypes你会看到
__init__.py
==================================================
"""create and manipulate C data types in Python"""
import os as _os, sys as _sys
__version__ = "1.1.0"
from _ctypes import Union, Structure, Array
from _ctypes import _Pointer
from _ctypes import CFuncPtr as _CFuncPtr
...
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,甚至os和sys他是这个文件的实施细则.
| 归档时间: |
|
| 查看次数: |
2008 次 |
| 最近记录: |