小编Tan*_*iol的帖子

如何在不污染其命名空间的情况下在python模块中执行导入?

我正在开发一个用于处理一些科学数据的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?我忽略了另一个好的解决方案吗?

python module python-import

31
推荐指数
3
解决办法
1万
查看次数

标签 统计

module ×1

python ×1

python-import ×1