我正在开发一个用于处理一些科学数据的Python包.其他模块和包中有多个经常使用的类和函数,包括numpy,我几乎在包的任何模块中定义的每个函数中都需要这些类和函数.
什么是Pythonic处理它们的方法?我考虑了多种变体,但每种变体都有其自身的缺点.
在模块级导入类from foreignmodule import Class1, Class2, function1, function2
然后可以从每个函数轻松访问导入的函数和类.另一方面,它们污染了模块命名空间,dir(package.module)并help(package.module)使用导入的函数混乱
在函数级别导入类from foreignmodule import 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
Run Code Online (Sandbox Code Playgroud)
这设法解决了问题,模块名称空间污染和功能的易用性......但它似乎根本不是Pythonic.
那么什么解决方案是最Pythonic?我忽略了另一个好的解决方案吗?