我编写了一个包含多个.py
文件的python包,其中包含类等等。我想使用“Facade”模式将其公开给客户端。所以我不希望客户端学习所有内部类,只需要学习这个API接口公开的方法。
问题是:我在哪里放这个api?我是否在包中定义了文件api.py
,或者我可以将此api放在包的__init__.py
中吗?
我用一个例子更好地解释
<my_module>\
__init__.py
core.py
submodule1.py
submodule2.py
util.py
........
那么我在哪里放置公共API?
答案 0 :(得分:10)
最常见的选择是使用__init__.py
- 只有当它足够复杂以保证它时才值得自己(或更多)模块运行(那么它不会是一个门面;-)或者更重要的是,如果您提供替代API(例如,简化的API具有减少的功能但更易于使用,以及丰富/复杂的API),在这种情况下,使用单独的模块可以使事情更好地组织。
要与包装用户沟通他们不应该直接导入其他模块,请务必使用前导下划线命名您的“私有内部实施模块” :_core.py
,而不是core.py
,依此类推。这个约定总是在Python中用于将公共API与内部实现细节分开,非常值得(实际上很小的)努力实现它!
答案 1 :(得分:7)
__init__.py
文件是放置公共API或包的可接受位置,其中的其他模块提供实现。
答案 2 :(得分:4)
将api放入__init__.py
:
将api放在像api.py这样的专用模块中可以解决这些问题。 此外,还有优点,如: