Python:从另一个模块访问类变量将返回'';(空字符串)来自导入的模块python

Python:从另一个模块访问类变量将返回'';(空字符串)来自导入的模块python,python,class,import,Python,Class,Import,我不熟悉python OO概念,并试图理解下面的程序,我需要在代码中使用该程序来访问一个类变量,但从其他模块访问时,该变量的值返回“”(空字符串)。我知道在我的例子中使用变量有一些错误/方法,所以请您告诉我下面代码中的错误以及如何正确使用它 下面是两个包含to类的文件 AA.py import BB class SubClass: def __init__(self): pass def operation1(self): s

我不熟悉python OO概念,并试图理解下面的程序,我需要在代码中使用该程序来访问一个类变量,但从其他模块访问时,该变量的值返回“”(空字符串)。我知道在我的例子中使用变量有一些错误/方法,所以请您告诉我下面代码中的错误以及如何正确使用它

下面是两个包含to类的文件

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)
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)
BB.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)
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')

你能告诉我为什么“主级车”的打印是“”(空字符串)而不是丰田吗?另外,什么是访问值的正确方法。

发生这种情况的原因是,您在
BB.py
中修改的
Main_类与
AA.py
导入的
Main_类不同,因为您正在运行
BB.py

当您运行这样的python脚本时

python BB.py
Python将把该模块作为
\uuuuu主模块加载。这就是为什么
if uuuuu name\uuuuuu=='\uuuuu main\uuuuuuu':
检查有效的原因。该模块的名称是
\uuuu main\uuuu
,而不是
BB

然后,您的
\uuuu main\uuuu
(请记住,不是
BB
)模块导入
AA
模块,它会找到该模块,因为它位于同一目录中,python会自动将该目录添加到
PYTHONPATH
。然后,
AA
模块加载
BB
模块,该模块将作为与从命令提示符运行的
BB.py
脚本完全不同的模块第二次导入

这就是为什么不应该从命令提示中直接运行模块文件的原因

您可以通过创建
CC.py
文件并运行
pythoncc.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中没有
Null
,而是
None
,但是这里没有
None
。。。你的意思是空字符串,
”?是的,我的意思是“空字符串”。编辑了这个问题,谢谢。有些东西你没有给我们看,请注意,
'CAR'
不在所有的大写字母中,因为你在
操作1
中的打印声明暗示了…为了在这个论坛上发布,我刚刚编辑了打印。100%确定除了打印,其他一切都是一样的,输出仍然是“”。抱歉打错了。它起作用了,我现在不理解了。我不能因为缺乏声望而放弃投票,但我肯定会很快给你一张。谢谢你抽出时间。