如何在导入模块时始终导入一个文件?
例如:考虑这个模块。
/ 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__.py
,main.py
或__main__.py
或__init__.py
可以将important.py
修改为默认甚至是{{1}}从中选择功能?
答案 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
。