如何优化Python包接口:隐藏XWrap、YWrap模块仅暴露X、Y类?
解决Python包接口简化问题
要隐藏XWrap和YWrap模块,只暴露X和Y类,可以通过以下几个步骤实现:
1. 明确导出范围(__all__)
在sub/__init__.py中定义__all__变量,指定允许外部导入的名称:
from .XWrap import X from .YWrap import Y # 仅导出X和Y类 __all__ = ['X', 'Y']
这会限制from package.sub import *的导入范围,避免外部获取到XWrap或YWrap模块。
2. 控制命名空间可见性(__dir__)
为了让dir(package.sub)和IDE自动补全只显示X和Y,添加自定义的__dir__函数:
from .XWrap import X from .YWrap import Y __all__ = ['X', 'Y'] def __dir__(): # 仅返回需要暴露的名称 return __all__
执行dir(package.sub)时只会输出['X', 'Y'],IDE的补全列表也会只展示这两个类,彻底隐藏XWrap和YWrap的存在。
3. 可选:进一步简化顶层接口
如果希望用户无需进入sub子模块,直接通过package.X和package.Y访问类,可以修改顶层__init__.py:
from .sub import X, Y __all__ = ['X', 'Y'] def __dir__(): return __all__
这样用户导入package后,直接就能使用X和Y类,连sub子模块也可以隐藏。
注意:如果只是不想让模块在命名空间和补全中显示,前两步已经足够。极端情况下若要彻底禁止访问
XWrap和YWrap,可以导入后从sys.modules中移除对应模块,但这种方式可能引发未知问题,不推荐常规使用。
内容的提问来源于stack exchange,提问作者Georgian Sarghi
相关产品推荐
相关产品推荐

