【问题标题】:Python : accessing a class variable from another module returns ''(Empty string) from imported module pythonPython:从另一个模块访问类变量从导入的模块python返回''(空字符串)
【发布时间】:2018-04-19 00:58:38
【问题描述】:

我是 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)

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

【问题讨论】:

  • Python中没有Null,而是None,但是这里没有Nones...你的意思是空字符串吗,''
  • 是的,我的意思是''空字符串。编辑问题,谢谢。
  • 有些东西您没有向我们展示,请注意,'CAR' 并非全部大写,因为您在 operstion1 中的打印声明会暗示...
  • 为了在这个论坛上发布它,我只是编辑了印刷品。 100% 确定,除了打印,其他一切都一样,输出仍然是“”。抱歉打错了。

标签: python class import


【解决方案1】:

发生这种情况的原因是因为您在BB.py 中修改的Main_ClassAA.py 正在导入的Main_Class 不同,因为您将python BB.py 作为主脚本运行。

当你像这样运行 python 脚本时

python BB.py

Python 会将该模块加载为__main__ 模块。这就是if __name__ == '__main__': 检查有效的原因。该模块的名称是__main__,而不是BB

然后,您的__main__(记住,不是BB)模块导入AA 模块,因为它位于同一目录中,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)

【讨论】:

  • 它起作用了,我现在不明白。由于缺乏声誉得分,我不能放弃你的投票,但我肯定很快就会给你一个。感谢您的宝贵时间。
猜你喜欢
  • 2020-12-30
  • 1970-01-01
  • 1970-01-01
  • 2021-02-13
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 2019-11-28
相关资源
最近更新 更多