我的代码使用user_data_dir不起作用,它会出错并说“自我”。没有定义。有人能解释一下为什么吗?

时间:2017-10-30 22:17:35

标签: kivy kivy-language user-data

以下是我的代码片段。当我尝试运行此操作时,错误表明“自我”#39;没有定义。我在网上复制了这段代码,因为我真的不知道如何使用函数user_data_dir。我知道它的工作原理(我用Windows写这个)只有store = JsonStore(' user.json')但是我一直在阅读使用user_data_dir函数会很有用因为它是为各种系统创建可写路径的通用函数。如果有人能帮忙解释一下会很棒!

from kivy.storage.jsonstore import JsonStore
from os.path import join

data_dir = getattr(self, 'user_data_dir')
store = JsonStore(join(data_dir,'user.json'))

class Welcome(Screen):
    pass

1 个答案:

答案 0 :(得分:0)

data_dir = getattr(self, 'user_data_dir')

当你复制这一行时,它就在某个类的函数内部:

class Some:
    def func(self):
        data_dir = getattr(self, 'user_data_dir')

Method located inside class in Python receives self作为第一个参数。

但并非每个对象都有user_data_dir属性:因为inclement注意到它的App个对象属性。你应该做点什么:

class MyApp(App):
    def build(self):

        data_dir = getattr(self, 'user_data_dir')
        store = JsonStore(join(data_dir,'user.json'))

        # ...

<强> UPD:

您可以在app class中存储json文件的路径,并访问app实例以使用App.get_running_app()获取此路径:

class MyApp(App):
    @property  # see https://www.programiz.com/python-programming/property
    def storage(self):
        return join(self.user_data_dir, 'user.json')

以后在任何你想要的地方:

class SomeClass():
    def some_func(self):
        print('here\'s our storage:', App.get_running_app().storage)