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