从另一个Python文件导入类变量

3

我正在尝试从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.run()中的变量self.board,Gui来自于gui.py?

2个回答

2

Try this:

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(类变量)将给您答案[5],而obj.board(实例变量)将给您答案[2]


是的,它可以工作,但正如其他答案中提到的那样,这要求我从eval.py运行整个文件gui.py。如果这是唯一的情况,那么我可能需要重新考虑我的程序结构。 - eligolf
根据您的程序,“board”是一个实例变量,只有在创建Gui类对象时才会被创建。如果您不想创建实例,只想访问类变量,则board需要成为类变量,而不是实例。请查看我更新的类变量响应,命名为board并设置为[5]。 - Umesh Jadhav
谢谢,我得出结论需要重新考虑如何安排我的文件/函数/代码 :) - eligolf

1
这与导入无关。 board 是一个实例变量,而不是类变量。你需要一个 Gui 的实例:
gui = Gui()
gui.run()
print(gui.board)

那么我需要运行整个文件才能检索到变量吗? - eligolf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接