如何使用Python3中的根应用程序立即使用包模块中的函数

问题描述 投票:0回答:1

有没有办法从根级主应用程序导入包中的所有模块,并在Python 3中立即提供模块中的功能?这是一个示例文件树:

+app
  |- __init__.py
  |- main.py
  |+ package
    |- __init__.py
    |- module.py #(contains function1, function2 and function 3)

我想避免在main.py中使用以下import语句(对于复杂的应用程序,它可能会变得冗长而邋)):

from package.module import function1, function2, function3

这很好,因为它让我从main.py调用function1()。仅从package.module导入函数意味着我必须调用函数的完整目录以在我的脚本中使用它(或在新函数中将其别名)。例如:

import package.module

package.module.function(param)#not fun...too long!

#or like this
def newFunction(param):
   '''why create a new function to handle an already existing one?
      Bad form and non Pythonic'''
   return package.module.function(param)

如果我在我的包裹的__all__ = ["module1", "module2"]中包含__init__.py,那意味着我必须执行以下操作:

from package import * #it is said this is bad form as well

module.function(param)
#I just want the function and don't want to call module also

我的目标是导入包和模块,然后充分利用模块中的所有功能,而无需在每次要使用该功能时显式调出包和模块。按照以下思路思考:

import package.module

function1(x)

我读过documentation for Python 3 about modules and packages。感谢您的想法/帮助。

python-3.x packages python-module filetree
1个回答
1
投票

最好的妥协似乎在导入时重命名:

import package.module as mod

mod.function(param)

输入三个字母应该足够短。同时导入是合格的,并且不会像*导入那样污染您的全局名称空间。您可以自由使用mod的任何名称。即使是一个单字母的名字也行。但建议在名称中至少包含三个字母。

© www.soinside.com 2019 - 2024. All rights reserved.