我有一个python module_A
正在做这样的事情:
myvar = "Hello"
def message():
print myvar
从另一个模块,我想导入函数message
:
from module_A import message
但这是定义myvar
,我不想要(因为这里没有真正相关的原因)。我想我需要的是区分从模块导入事物和使用任何导入的符号。实际上,当我使用myvar
时,我希望message
只能初始化 。
我有任何类型的python钩子,我可以用来在访问函数或类时初始化东西?我想要类似于以下内容:
module_setup_done = False
def setup():
global module_setup_done, myvar
if not module_setup_done:
myvar = "Hello"
module_setup_done = True
def message():
setup()
print myvar
但是,为了减少混乱,我希望自动调用它,如下所示:
def _init_module():
global myvar
myvar = "Hello"
def message():
print myvar
_init_module()
只会被一次调用,而且只有第一次调用模块中的内容 ,而不是某些内容被导入
python中是否支持这种模式?
答案 0 :(得分:4)
不,没有内置支持。如果要与导入模块分开初始化事物,请编写一个执行该初始化的函数,然后在想要初始化这些内容时调用该函数。如果你想在调用其他东西时“自动”初始化事物,你必须自己处理你已经发布的代码。
如果你发现自己这样做了,你可能正在做一些非语言的事情。你没有详细说明你为什么在这里做,但一般来说这种隐式初始化在Python中不是一个好习惯。当您明确告诉它们时,事情会被初始化,例如通过导入模块或调用某种初始化函数。为什么你觉得需要这个单独的隐式初始化步骤?