Python:从另一个模块访问类变量从导入的模块python

时间:2018-04-19 00:58:39

标签: python class import

我是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'打印是“(空字符串)而不是丰田?此外,什么是访问该值的正确方法。

1 个答案:

答案 0 :(得分:1)

发生这种情况的原因是因为Main_Class中您要修改的BB.pyMain_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