我需要确保两个文件具有相同的 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 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