Py学习  »  Python

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

DEEPAK WANI • 6 年前 • 1874 次点击  

我的设置: 小精灵:

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

现在,当我把obj导入 mod3.py 正在执行cars的init方法。我想要的obj已经被初始化了 mod2.py ,mod3应该已经初始化了实例,而不是创建新实例。 如何在Python中做到这一点

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/43899
文章 [ 1 ]  |  最新文章 6 年前
bruno desthuilliers
Reply   •   1 楼
bruno desthuilliers    7 年前

现在,当我在mod3.py init中导入obj时,cars的方法被执行了。

当然,这是你告诉python要做的。第一次导入模块(在给定的进程中)时,将执行顶层的所有语句。你创造 obj 在mod2的顶层,所以第一次导入 mod2 , mod1 是进口的,那么 mod1.cars(...) 被称为 mod1.cars.__init__() .

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

事情就是这样。当然,对于当前进程-对象不存在于进程之外(也不在进程之间共享)

我指的是来自不同模块的第一次导入

只要所有这些进口都在同一个过程中发生, mod2.obj 只创建一次 对于这个过程 . 当然,如果有不同的进程,每个进程都有自己的实例 OBJ -正如我所说,对象只存在于运行时,不在进程之间共享(希望如此)。

这个 只有 如果您可以使用两次导入相同的模块,则 sys.path 是混乱的,允许同一个模块名根据两个不同的限定名进行解析,并且一个导入使用一个限定名,另一个导入使用另一个限定名,但是这种情况相当少见。