如何从另一个类访问main.py中已经初始化的类变量

时间:2019-08-21 00:43:56

标签: python kivy

我有一个带有一组变量的类,这些变量可以从main.py脚本进行初始化和访问。我有另一个类,它是从main.py文件深一层的文件夹中导入的。

我可以通过引用appVars.some_variable访问main.py文件中任何位置的已设置变量。但是,我无法在--screen1.py类中访问它们。似乎--Variables.py类正在嵌套类中重新初始化,这导致空值。

如何从main.py脚本中的--ScreenOne.py脚本访问已经初始化的类变量?

文件/文件夹结构

main.py
-classes
--ScreenOne.py
--Variables.py

variables.py

from kivy.properties import StringProperty

class Variables():
    def __init__(self):
        self.server_time = StringProperty('')

main.py

from classes.ScreenOne import ScreenOne
from classes.Variables import Variables
appVars = Variables()

class SomeApp(App):

    def update_clock(self, *args):
        appVars.server_time = datetime.now()

-ScreenOne.py

from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import StringProperty
from classes.Variables import Variables

class ScreenOne(Screen):

    def on_enter(self):
        print(Variables.server_time)

我还尝试过将appVars = Variables()添加到--ScreenOne.py脚本的开头并引用appVars.server_time,但是,效果不佳。

1 个答案:

答案 0 :(得分:0)

在main.py中,您可以通过appVars = Variables()初始化类Variables。但是在ScreenOne中,您导入变量却从不启动它,除了启动它之外,它还会提供一个与main中的appVars不同的新实例(print(Variables.server_time)也会给出错误)。

要在ScreenOne中使用appVars,您需要将appVars传递给此类,例如:

from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import StringProperty


class ScreenOne(Screen):

    def __init__(self, appVars):
        self.appVars = appVars

    def on_enter(self):
        print(self.appVars.server_time)

然后,当您启动ScreenOne时,您将执行以下操作:

screen_one = ScreenOne(appVars)

请注意,ScreenOne中,您无需导入Variables,因为此类的所有属性都将随appVars一起提供。

按照PEP8的方式,变量名不应使用大写字母,而应使用下划线appVars-> app_vars