2

我有一个 pythonmodule_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

Where_init_module()只会被调用一次,并且仅在第一次访问模块中的某些内容时调用,而不是在导入某些内容时。

python中是否支持这种模式?

4

1 回答 1

4

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

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

于 2012-10-11T05:36:03.107 回答