在python中导入模块时始终包含文件

时间:2014-04-11 17:52:45

标签: python module

如何在导入模块时始终导入一个文件?

例如:考虑这个模块。

/ myMod
   / __init__.py
   / important.py               # defines myFunc
   / extraFunctions.py
   / classDefinitions.py

任何人使用模块的所有功能都在 important.py 中。我希望myMod中默认包含 important.py 。所以使用模块就是这样。

import myMod
myMod.myFunc()

而不是

from myModimport important
important.myMod()

import myMod
myMod.important.myFunc()

important.py是否应重命名为__init__.pymain.py__main__.py__init__.py可以将important.py修改为默认甚至是{{1}}从中选择功能?

2 个答案:

答案 0 :(得分:3)

您不必将important.py重命名为__init__.py,只需将其添加到__init__.py文件中即可:

from important import *

全部。

答案 1 :(得分:3)

除了Raydel的回答之外,我想补充一点:如果您的important模块包含您不想导出的私有函数,则有一种方法可以控制它。这是一个例子:

# important.py

# This magic variable controls what gets import via
# from important import *
__all__ = ['dothis', 'dothat']

def dothis():
    pass

def dothat():
    pass

def private1():
    pass

使用魔术变量__all__,您可以控制导出哪个函数。

更新

__init__.py开始,您可以:

from important import dothis, dothat

这是控制导入哪个实体(函数,变量)的另一种方法。

但是,如果来自__init__.py,您可以执行此操作:

import important
important.private1() # OK

或:

from important import private1 # OK, too

这意味着如果您愿意,可以覆盖__all__魔术变量。在我看来,前一种方法更好,因为导入private1的人无法使用myMod