编写Python模块时,有没有办法判断模块是导入还是重新加载?
我知道我可以创建一个类,__init__()
只会在第一次导入时调用,但我没有计划创建一个类。但是,如果没有一种简单的方法可以判断我们是否正在导入或重新加载。
答案 0 :(得分:1)
documentation for reload()
实际上提供了一个我认为应该适用于您的目的的代码段,至少在通常情况下如此。你会做这样的事情:
try:
reloading
except NameError:
reloading = False # means the module is being imported
else:
reloading = True # means the module is being reloaded
这实际上是检测模块是“干净地”导入(例如,第一次)还是覆盖同一模块的先前实例。在正常情况下,“clean”导入对应于import
语句,“dirty”导入对应于reload()
,因为import
仅真正导入模块一次,这是第一次它被执行(对于每个给定的模块)。
如果你以某种方式设法强制后续执行import
语句做一些不重要的事情,或者你以某种方式设法使用reload()
第一次导入你的模块,或者你乱七八糟使用导入机制(通过imp
模块等),所有投注均已关闭。换句话说,不要指望总是在每种可能的情况下工作。
P.S。你问这个问题的事实让我想知道你是否正在做你可能不应该做的事情,但我不会问。
答案 1 :(得分:0)
>>> import os
>>> os.foo = 5
>>> os.foo
5
>>> import os
>>> os.foo
5