Python:如何在一个模块中初始化对象并在另一个模块中使用它

时间:2018-10-30 13:49:22

标签: python oop python-import pickle python-object

我的设置: 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中做到这一点

1 个答案:

答案 0 :(得分:1)

  

现在,发生的是当我在汽车的mod3.py init方法中导入obj时得到执行。

当然是,这就是您告诉python要做的。第一次导入模块(在给定过程中)时,将执行顶层的所有语句。您在mod2的顶层创建了obj,因此,第一次导入mod2时,会导入mod1,然后调用mod1.cars(...),它会调用{{1} }。

  

我想要它是什么,因为obj已经在mod2.py中初始化了,所以mod3应该已经初始化了实例

这正是发生的情况。当然,对于当前的流程-对象不会存在于流程之外(并且不会在流程之间共享)

  

每次导入都是指从不同模块进行的首次导入

只要所有这些导入都在同一过程中进行,则mod1.cars.__init__()只会为该过程创建一次。当然,如果您有不同的进程,则每个进程将具有自己的mod2.obj实例-正如我所说,对象仅在运行时存在,并且不希望在进程之间共享。

情况下,您可以两次导入相同的模块,这是因为您的obj被弄乱了,并允许将相同的模块名称解析为两个不同的限定名称,并且您拥有一个导入使用一个限定名称,另一个使用另一个限定名称-但这是非常不常见的情况。