1

我的设置:mod1.py:

class cars:
    def __init__(self,x,y,z):
        self.x = x

mod2.py:

import mod1
obj = mod1.cars(x,y,z)

模组3.py

from mod2 import obj

现在,发生的事情是当我在mod3.py汽车的 init 方法中导入 obj 时正在执行。我想要它,因为 obj 已经初始化mod2.py,mod3 应该已经初始化实例而不是创建新实例。我怎么能在python中做到这一点

4

1 回答 1

1

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

当然是,这就是你告诉 python 要做的事情。第一次导入模块时(在给定进程中),顶层的所有语句都会被执行。您obj在 mod2 的顶层创建,所以第一次导入mod2时,mod1被导入,然后mod1.cars(...)被调用,它调用mod1.cars.__init__().

我想要的 obj 已经在 mod2.py 中初始化了,mod3 应该已经初始化了实例

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

每次导入我的意思是从不同模块的每次第一次导入

只要所有这些导入发生在同一个进程中,mod2.obj就只会为此进程创建一次。当然,如果你有不同的进程,每个进程都会有它自己的实例obj——正如我所说,对象只存在于运行时并且不会在进程之间共享(希望如此)。

您可以两次导入相同模块的唯一情况是,如果您sys.path搞砸了并允许针对两个不同的限定名称解析相同的模块名称,并且您使用一个限定名称进行一个导入,而另一个使用另一个限定名称进行导入 -但这是一种相当少见的情况。

于 2018-10-30T15:09:58.407 回答