导入

时间:2017-04-12 17:11:11

标签: python oop variables

我有一个python文件负责optionparsing,设置一些东西,然后启动gui。 gui本身和一些辅助函数在另一个python文件中。

file1.py:

myConf = None

if __name__ == "__main__":
    confFileName = HOME+"/test/.conf"    
    myConf = Config()
    print(myConf)    # works as expected

    run()    # this starts the gui

file2.py

from file1 import myConf

...somestuff...
    def on_clicked( self, widget ):
        mappings = myConf.GetMappings()

一旦触发on_clicked回调,我就会收到异常:

AttributeError: 'NoneType' object has no attribute 'GetMappings'

这意味着file2中使用的myConf尚未初始化。 但是,在文件1中初始化myCOnf之后设置了gui。 我希望myConf成为一个全局对象,它存储的信息然后每个其他文件都可以在运行时访问。

什么错了?为什么它没有按预期工作?

file2是否有自己尚未初始化的符号副本?

1 个答案:

答案 0 :(得分:0)

直接运行file1.py时,会执行__name__ == "__main__"下的代码,初始化myConf并按预期工作。但是,当您执行from file1 import myConf时,file1.py 主脚本,因此会将myConf保留在初始化为None的位置。因此,导入myConf时,其值为None,并引发None没有属性getMappings的错误。它没有此属性,因此意味着引发错误。

要解决此问题,您需要将初始化脚本移出if __name__ == "__main__"。这使您的脚本看起来像这样:

myConf = None

confFileName = HOME+"/test/.conf"    
myConf = Config()

if __name__ == "__main__":
    print(myConf)

    run()    # this starts the gui