python : accessing a class variable from another module returns '' (Empty string) from imported module python

标签 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”字样是“”(空字符串)而不是 Toyota?此外,访问该值的正确方法是什么。

最佳答案

发生这种情况的原因是因为您在 BB.py 中修改的 Main_ClassAA 不同 Main_Class .py 正在导入,因为您正在运行 python 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/

相关文章:

python - 操作错误 : (2001, "Can' t 创建 UNIX 套接字 (24)")

Python:如何使用相对导入来导入包根目录

javascript - node.js stylus导入自动重建,过期?

python - 如何通过 MIMEMultipart 发送电子邮件正文部分

python - 使用 pandas 根据纪元时间每天和每周对数据进行分组

Python:具有多个 setup.py 文件的多个包

c++ - 必须是非静态成员函数

具有动态创建的数据成员的 Java 对象

javascript - 在单个命名空间下组合 javascript 伪类对象

javascript - 在 vue 3 中导入 bootstrapVue