我正在开发一个用于处理一些科学数据的Python包。在其他模块和包中有多个经常使用的类和函数,包括numpy,我几乎需要在包的任何模块中定义的每个函数。
Pythonic的处理方式是什么?我已经考虑过多种变体,但每个都有自己的缺点。
>从外部模块导入Class1,Class2,function1,function2导入模块级别的类
然后可以从每个功能轻松访问导入的函数和类。另一方面,它们污染模块命名空间,使dir(package.module)和帮助(package.module)与导入的函数混淆
>从外部模块导入Class1,Class2,function1,function2导入功能级别的类
函数和类可以方便地访问,并且不会污染模块,但是在每个函数中从最多十个模块导入看起来很多重复的代码。
>使用import foreignmodule导入模块级别的模块
由于需要将模块名称添加到每个功能或类别调用中,所以不需要太多的污染。
>使用一些人工变通方法,例如对所有这些操作使用函数体,并仅返回要导出的对象…像这样
def _export():
from foreignmodule import Class1, Class2, function1, function2
def myfunc(x):
return function1(x, function2(x))
return myfunc
myfunc = _export()
del _export
这就解决了这两个问题,模块命名空间污染和功能的易用性,但它似乎根本不是Pythonic。
那么什么解决方案是最坚定的?还有另一个好的解决方案我忽略了吗?