用于模块初始化的Python钩子

时间:2012-10-11 05:29:16

标签: python module initialization

我有一个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中是否支持这种模式?

1 个答案:

答案 0 :(得分:4)

不,没有内置支持。如果要与导入模块分开初始化事物,请编写一个执行该初始化的函数,然后在想要初始化这些内容时调用该函数。如果你想在调用其他东西时“自动”初始化事物,你必须自己处理你已经发布的代码。

如果你发现自己这样做了,你可能正在做一些非语言的事情。你没有详细说明你为什么在这里做,但一般来说这种隐式初始化在Python中不是一个好习惯。当您明确告诉它们时,事情会被初始化,例如通过导入模块或调用某种初始化函数。为什么你觉得需要这个单独的隐式初始化步骤?