我的设置: mod1.py:
class cars:
def __init__(self,x,y,z):
self.x = x
mod2.py:
import mod1
obj = mod1.cars(x,y,z)
mod3.py
from mod2 import obj
现在,发生的事情是当我在汽车的mod3.py
的init方法中导入obj时正在执行。我想要的是obj已在mod2.py
中初始化的东西,因此mod3应该已经初始化了实例,而不创建新实例。
如何在python中做到这一点
答案 0 :(得分:1)
现在,发生的是当我在汽车的mod3.py init方法中导入obj时得到执行。
当然是,这就是您告诉python要做的。第一次导入模块(在给定过程中)时,将执行顶层的所有语句。您在mod2的顶层创建了obj
,因此,第一次导入mod2
时,会导入mod1
,然后调用mod1.cars(...)
,它会调用{{1} }。
我想要它是什么,因为obj已经在mod2.py中初始化了,所以mod3应该已经初始化了实例
这正是发生的情况。当然,对于当前的流程-对象不会存在于流程之外(并且不会在流程之间共享)
每次导入都是指从不同模块进行的首次导入
只要所有这些导入都在同一过程中进行,则mod1.cars.__init__()
只会为该过程创建一次。当然,如果您有不同的进程,则每个进程将具有自己的mod2.obj
实例-正如我所说,对象仅在运行时存在,并且不希望在进程之间共享。
仅 情况下,您可以两次导入相同的模块,这是因为您的obj
被弄乱了,并允许将相同的模块名称解析为两个不同的限定名称,并且您拥有一个导入使用一个限定名称,另一个使用另一个限定名称-但这是非常不常见的情况。