2

在编写 Python 模块时,有没有办法判断模块是被导入还是重新加载?

我知道我可以创建一个类,并且__init__()只会在第一次导入时调用,但我没有计划创建一个类。不过,如果没有简单的方法来判断我们是被导入还是重新加载,我会的。

4

2 回答 2

3

文档reload()实际上提供了一个代码片段,我认为它应该适用于您的目的,至少在通常情况下是这样。你会做这样的事情:

try:
    reloading
except NameError:
    reloading = False # means the module is being imported
else:
    reloading = True # means the module is being reloaded

这真正做的是检测模块是“干净地”导入(例如第一次)还是覆盖同一模块的先前实例。在正常情况下,“干净”导入对应于import语句,而“脏”导入对应于reload(),因为import只真正导入了一次模块,即第一次执行(对于每个给定模块)。

如果您以某种方式设法强制执行该import语句的后续执行来做一些不平凡的事情,或者您以某种方式设法第一次使用 导入您的模块reload(),或者您弄乱了导入机制(通过imp模块等),所有赌注都取消了。换句话说,不要指望这总是在所有可能的情况下都有效。

PS你问这个问题的事实让我想知道你是否在做你可能不应该做的事情,但我不会问。

于 2011-05-18T01:38:36.383 回答
0
>>> import os
>>> os.foo = 5
>>> os.foo
5
>>> import os
>>> os.foo
5
于 2011-05-18T01:22:32.597 回答