是否有可能在python中检测模块的导入方式?

时间:2014-07-30 21:15:33

标签: python import

想象一下,您的模块foo包含变量bar和线程baz,可以自动更新bar

from threading import Thread
import sys
bar = 0
class baz(Thread):
  def run(self):
    while True:
      setattr(sys.modules[__name__], 'bar', getattr(sys.modules[__name__], 'bar')+1);
baz().start()
#Note: Globals is intentionally not used instead of getattr and setattr

由于这个帖子的更新在__main__中无法读取(因为在{_ 1}}中从__main__中复制了一个副本,是否有可能找出是否可以模块是使用foo还是from foo import *导入的,根据结果,将setattr中的__name__和getattr自动更改为__main__? This topic's answer提供了一种通过__main__中的代码检测它的方法,但我希望模块能够自己检测它。这有可能吗?

1 个答案:

答案 0 :(得分:0)

没有。一个原因是模块可以从许多地方多次导入。可以在一个位置导入import foo,在另一个位置导入from foo import *。第二次导入时不会“发生”任何事情(将使用sys.modules中已导入的模块),因此您的模块无法检测到它。