我是 python OO 概念的新手,并试图理解下面的程序,我需要在我的代码中使用它来访问类变量之一,但是当从其他模块。我知道在我的情况下使用变量有一些错误/方式,所以请你告诉我下面的代码有什么问题以及如何正确使用它。
这是带有类的两个文件。
AA.py
import BB
class SubClass:
def __init__(self):
pass
def operation1(self):
sat2 = BB.Main_Class()
print('Main Class CAR ',sat2.car)
print('Main Class CAR ', BB.Main_Class.car)
BB.py
import AA
class Main_Class:
car = ''
def __init__(self):
pass
def go(self):
Main_Class.car = 'Toyota'
print('In BB Main_Class.car', Main_Class.car)
nit = AA.SubClass()
nit.operation1()
if __name__ == '__main__':
sat1 = Main_Class()
sat1.go()
print('1 instacne',sat1.car)
print('Class instacne',Main_Class.car)
输出是,
('In BB MainClass.car', 'Toyota')
('Main Class CAR', '')
('Main Class CAR', '')
('1 instacne', 'Toyota')
('Class instacne', 'Toyota')
您能否告诉我为什么“Main Class Car”字样是“”(空字符串)而不是 Toyota?此外,访问该值的正确方法是什么。
最佳答案
发生这种情况的原因是因为您在 BB.py
中修改的 Main_Class
与 AA 不同
正在导入,因为您正在运行 Main_Class
.pypython BB.py
作为主脚本。
当你像这样运行 python 脚本时
python BB.py
Python 将加载该模块作为 __main__
模块。这就是 if __name__ == '__main__':
检查有效的原因。该模块的名称是 __main__
,而不是 BB
。
然后,您的 __main__
(记住,不是 BB
)模块导入 AA
模块,它会找到它,因为它位于同一目录中, which python 自动添加到 PYTHONPATH
。然后 AA
模块加载 BB
模块,将作为与 BB.py
完全不同的模块第二次导入您从命令提示符运行的脚本。
这就是为什么你不应该直接从命令提示符运行你的模块文件的原因。
您可以通过创建一个 CC.py
文件并运行 python CC.py
if __name__ == '__main__':
import BB
sat1 = BB.Main_Class()
sat1.go()
print('1 instacne', sat1.car)
print('Class instacne', BB.Main_Class.car)
关于 python : accessing a class variable from another module returns '' (Empty string) from imported module python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49911095/