在文件之间获取对象

问题描述 投票:0回答:1

我需要确保两个文件具有相同的 Car 类对象。我该怎么做?

主.py

import newFile1

class Car:
    def __init__(self, speed):
        self.speed = speed

car = Car(10)
print("main.py:", id(car))

newFile1.py

from main import car

print("newFile1.py:", id(car))

输出:

main.py: 2095179490752
newFile1.py: 2095179490752
main.py: 2095175287280

ID不同,如何使它们相同?

python oop import
1个回答
0
投票

我认为正在发生的事情是,当你运行

python main.py
时,python 将
main.py
作为脚本执行,而不是将其作为模块导入。当它执行
main.py
的第一行时,python 会导入
newFile1.py
,然后将
main.py
作为模块导入,导致它被第二次执行。在该部分执行期间,解释器最终到达创建
Car
类和
car
实例的行。然后它会打印
car
实例的 id。然后将该实例导入到
newFile1.py
中(或者从技术上讲,它被添加到
newFile1
的命名空间中),然后再次打印其 id。然后执行保留到您从命令行运行的
main.py
脚本。创建一个名为
Car
的新类,并实例化该类的一个名为
car
的实例。当然,这个新实例的 id 与
main
模块和
newFile1
模块中打印的不同类的不同实例不同。

如果您创建了一个不同的 python 文件作为脚本,例如

real_main.py
,并将
main
导入其中,那么您将只有一个 Car 类实例,然后您可以共享在那里创建的
car
实例。但正如评论中所指出的,您的模块有循环引用,因此您实际上希望能够从单独的脚本导入
main
模块。

正如也指出的那样,您可以很容易地解决循环引用,因为您实际上并没有在

newFile1
中使用
main
,因此您可以删除该导入。这会给你类似的东西:

main.py

class Car:
    def __init__(self, speed):
        self.speed = speed

car = Car(10)
print("main.py:", id(car))

newFile1.py

from main import car

print("newFile1.py:", id(car))

realmain.py

from main import car
import newFile1

print("realmain.py:", id(car))

然后当你运行

python realmain.py
时,你会得到类似的输出

main.py: 4315218384
newFile1.py: 4315218384
realmain.py: 4315218384
© www.soinside.com 2019 - 2024. All rights reserved.