在编写 Python 模块时,有没有办法判断模块是被导入还是重新加载?
我知道我可以创建一个类,并且__init__()
只会在第一次导入时调用,但我没有计划创建一个类。不过,如果没有简单的方法来判断我们是被导入还是重新加载,我会的。
在编写 Python 模块时,有没有办法判断模块是被导入还是重新加载?
我知道我可以创建一个类,并且__init__()
只会在第一次导入时调用,但我没有计划创建一个类。不过,如果没有简单的方法来判断我们是被导入还是重新加载,我会的。
的文档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你问这个问题的事实让我想知道你是否在做你可能不应该做的事情,但我不会问。
>>> import os
>>> os.foo = 5
>>> os.foo
5
>>> import os
>>> os.foo
5