不同的导入会在Python中导入不同的类对象吗?

2024-04-27 04:57:51 发布

您现在位置:Python中文网/ 问答频道 /正文

到目前为止,我通常将模块作为

from quantumClasses.qcAbstract import QCAbstract

其中quantumClasses是PYTHONPATH路由中的一个文件夹。但如果我碰巧在同一路径的另一个模块中,我可以这样做

from qcAbstract import QCAbstract

而且似乎是一样的,我从来没有注意到我用的是哪一个。但现在我遇到了一个令人痛苦的案子。我在下面的玩具示例中简化了它。Car是一个具有class属性的类。我有前面提到的两种导入方式的函数,它们似乎在访问不同的类。你知道吗

考虑文件:

# car.py

class Car(object):
    attrib = 0


# tools1.py
from car import Car

def get1():
    return Car.attrib

def set1(val):
    Car.attrib = val


# tools2.py
from car import Car

def get2():
    return Car.attrib

def set2(val):
    Car.attrib = val


# tools3.py
from quantumClasses.car import Car

def get3():
    return Car.attrib

def set3(val):
    Car.attrib = val


# testCar.py
from tools1 import get1, set1
from tools2 import get2, set2
from tools3 import get3, set3


set1(10)
set3(5)
print(get1())
print(get3())
print(get2())

当我执行测试车.py,我明白了

10
5
10

所以,看起来我在处理两个不同的类quantumClasses.qcAbstract.qcAbstract类 以及qcAbstract.qcAbstract摘要,尽管它们都是在同一个物理文件中定义的。你知道吗

我做错什么了吗?避免这些尴尬局面的标准方法是什么?你知道吗

EDIT:应该指定,这是python2.7


Tags: frompyimportreturndefvalcarattrib
1条回答
网友
1楼 · 发布于 2024-04-27 04:57:51

我认为您将同一个文件作为两个不同的模块导入。 他们有两个不同的名字。你知道吗

看看sys.modulescar.__name__quantumClasses.car.__name__应该不同。你知道吗

这是因为您从两个不同的路径导入它们,可能是site-packages.。这样Python就不能确定它是否是同一个文件。因为一个文件是site-packages/quantumClasses/car.py,另一个是./car.py。你知道吗

如果你想把名字设置成

  1. 决定一次导入!通常是quantumClasses.car
  2. 可能但不推荐:import sys; sys.modules['quantumClasses.car'] = car

相关问题 更多 >