3

您如何确定正在导入的模块中的导入模块的名称。我有部分解决方案,但没有完整的解决方案。

代码是:A.py

import B

if __name__ == '__main__':
    print 'This a test'

B.py

import sys
import C
if sys.argv[0] == 'A':
    doSomething()

在这一点上,我已经准备好了,因为在模块 B 中,我知道调用导入的 main 的名称,在这种情况下是 A。但是,在 B 中,请求导入 C,并且在 C 中我想知道B是否输入了C?这是怎么做到的?

4

3 回答 3

2

sys.argv[0]执行时不是模块的名称import。这是可执行文件的名称。

另一方面,在 Python 模块内部__name__等于 a) 模块名称,如果它是通过导入执行的,b)"__main__"如果它是作为脚本执行的。

模块不“知道”谁执行import(没有“父”属性或类似的东西)。用不同的函数定义你的行为,并从不同的模块调用它们。

于 2012-12-10T14:52:04.603 回答
0

但是,我怀疑这实际上是您想要做的。请特别注意,B 中的顶级代码只会运行一次,无论从多少地方导入模块多少次。

例如,如果您还在某个地方导入了模块 D,该模块在模块 B 到达之前导入了模块 C,那么当从 B 导入时,您在 C 中的代码将永远不会运行。

我认为在 C 中简单地定义一个函数可能是一个更好的主意,在导入 C 之后 B 可以运行一次。

于 2012-12-10T14:50:42.713 回答
0

您可以尝试解释器堆栈回溯。两者都会给你堆栈的函数调用,所以这不是你想要的解决方案(模块)。

于 2012-12-10T14:53:38.473 回答