想象一下,您的模块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__中的代码检测它的方法,但我希望模块能够自己检测它。这有可能吗?
答案 0 :(得分:0)
没有。一个原因是模块可以从许多地方多次导入。可以在一个位置导入import foo
,在另一个位置导入from foo import *
。第二次导入时不会“发生”任何事情(将使用sys.modules
中已导入的模块),因此您的模块无法检测到它。