我是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'打印是“(空字符串)而不是丰田?此外,什么是访问该值的正确方法。
答案 0 :(得分:1)
发生这种情况的原因是因为Main_Class
中您要修改的BB.py
与Main_Class
导入的AA.py
不同,因为您正在运行python BB.py
作为主要脚本。
运行像这样的python脚本时
python BB.py
Python会将该模块加载为__main__
模块。这就是if __name__ == '__main__':
检查有效的原因。该模块的名称为__main__
,而非BB
。
然后,您的__main__
(请记住,而不是BB
)模块导入它找到的AA
模块,因为它位于同一目录中,python会自动添加到{{1 }}。然后PYTHONPATH
模块加载AA
模块,它将作为与从命令提示符运行的BB
脚本完全不同的模块第二次导入
这就是为什么不应该直接从命令提示符运行模块文件的原因。
您可以通过创建BB.py
文件并运行CC.py
python CC.py