如何将类中的变量从一个文件导入另一个文件?

时间:2017-08-03 04:47:28

标签: python-3.x file class tkinter python-import

档案1

#file1
from tkinter import *

class UI:
    def __init__(self):
        self.main_window = Tk()
        sam = 'TestWord'
        import file2

    def run(self):
        self.main_window.mainloop()    

def main():
    ui = UI()
    ui.run()

main()

文件2

#file2
from file1 import sam
print(sam)

输出

from file1 import sam
builtins.ImportError: cannot import name 'sam'

如何在课堂上导入sam?如果没有上课,我知道如何做到这一点。此外,此代码打开了两个GUI,它们必须是问题的一部分,但此时我完全迷失了。两个变量都必须是self.sam吗?所以,self.sam =' TestWord'并导入self.sam。我试过这个并没有用,但是,我可能会错过这里的细节。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

问题是import file2不会为您运行代码。它只发生在python REPL上。

你可以做类似下面的事情,

<强> File1中:

from tkinter import *

class UI:
    def __init__(self):
        self.main_window = Tk()
        sam = 'TestWord'
        from file2 import foo
        foo(sam)

    def run(self):
        self.main_window.mainloop()    

def main():
    ui = UI()
    ui.run()

main()

<强>文件2:

def foo(sam):
    print(sam)

答案 1 :(得分:0)

因此,导入file1时,main()不会运行,只有在运行file1时才会运行

if __name__ == '__main__':
    main()

此外,您无法访问类中的sam,这不是文件的问题,要从类外部访问它,您需要将其设置为全局,或者使用{{1并且有一个你的类的实例。

更好的方法是让file2包含使用导入文件1的self.sam = ...值的方法。

在没有看到您的实际用例的情况下,我无法提供任何其他方法来实现您想要的内容,但您真的不应该让它从全局访问另一个文件。