python模块导入规则

时间:2018-07-02 15:02:16

标签: python import

A.py

print("it is A")

B0.py

import A
print("It is B")

B1.py

import A
print("it is another B")

C.py

import B0
import B1
print("C")

那么结果就是

it is A
It is B
it is another B
C

我不明白这个结果。我认为是在下面。

""" my theory"""
it is A
It is B  
it is A  # <- twice
it is another B
C

因为A.py被B0和B1两次导入。所以我认为A的内容也必须运行两次。但事实并非如此。

我错过了什么?


亲切的人告诉我这篇文章。 What happens when a module is imported twice?

我读过,几乎没有帮助,但不是100%。 因为那个问题在同一对象中两次讨论了添加模块。

我的问题是添加具有相同模块的不同对象。

因此,我可以检查使用dir()导入的模块。

dir()结果如下,

['B0', 'B1', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']

所以我通过print(dir(B0))和print(dir(B1))重新检查了每个模块 B0和B1     ['A','内置插件','缓存”,“ doc ”,“ 文件”,“ loader ”,“ 名称”,“ 软件包”,“ 规格”]

是的他们有相同的对象A .....

哦,我有理论。 如果它们具有相同的A对象,我的意思是,B0和B1的id(A)是相同的,那么这完全可以理解。

等一下。我会运行它。


我尝试了

print(id(B1.A))
print(id(B0.A))

结果是

2298894767032
2298894767032

相同。是的他们指向同一个对象。这就是为什么打印A只运行1次的原因。

0 个答案:

没有答案