【问题标题】:Importing class variable form another file Python从另一个文件Python导入类变量
【发布时间】:2019-10-31 07:20:56
【问题描述】:

我正在尝试从 Python 3 中的另一个文件导入特定的类变量。但是,我不确定如何正确地执行此操作,甚至根本无法使其正常工作。

文件“gui.py”

class Gui:
    def __init__(self):
        self.board = [0]

    def run(self):
        self.board = [2]

if __name__ == '__main__':
    Gui().run()

在下面的文件 eval.py 中,我想使用 gui.py 中更新的变量 self.board = [2]。我尝试了下面的代码示例,但在这两种情况下都得到了错误“AttributeError: type object 'Gui' has no attribute 'board'”。

文件“eval.py”

from gui import Gui

board = Gui.board
board = __import__('gui').Gui.board

我还尝试从 gui.py 中删除 name=main 东西,但正如预期的那样,它只让 gui.py 运行它的代码,然后我得到了与以前相同的错误。

如何以最佳和最有效的方式从 eval.py 中的 gui.py 访问来自 Gui.run() 的变量 self.board?

【问题讨论】:

    标签: python python-3.x import


    【解决方案1】:

    试试这个:

    test.py

    class Gui:
        def __init__(self):
            self.board = [0]
    
        def run(self):
            self.board = [2]        
    

    test1.py

    from test import Gui
    
    boardObj = Gui()
    boardObj.run()
    
    print(boardObj.board)
    

    运行test.py,你就可以从test1.py文件中访问board,它会被修改为[2]。

    类变量示例:

    test.py

    class Gui:
        board = [5]
        def __init__(self):
            self.board = [0]
        def run(self):
            self.board = [2]   
    

    test1.py

    from test import Gui
    
    print(Gui.board)
    
    obj = Gui()
    obj.run()
    
    print(obj.board)
    

    Gui.board(class variable) 会给你 ans [5],obj.board(instance variable) 会给你 ans [2]

    【讨论】:

    • 是的,它可以工作,但正如另一个答案中提到的,这需要我从 eval.py 运行整个文件 gui.py。如果这是唯一的情况,那么我可能不得不重新考虑我的程序的结构。
    • 根据您的程序,“board”是一个实例变量,只有在您创建 Gui 类的对象时才会创建。如果您不想创建实例而只想访问类变量,那么板需要是类变量,而不是实例。请参阅我将名为 board 的类变量设置为 [5] 的更新响应。
    • 谢谢,我得出的结论是我需要重新考虑如何安排我的文件/功能/代码:)
    【解决方案2】:

    这与导入无关。

    board 是一个实例变量,而不是一个类。你需要一个 Gui 的实例:

    gui = Gui()
    gui.run()
    print(gui.board)
    

    【讨论】:

    • 所以我需要运行整个文件才能检索变量?
    猜你喜欢
    • 2021-04-17
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 2019-05-23
    • 1970-01-01
    相关资源
    最近更新 更多