以下是我的代码片段。当我尝试运行此操作时,错误表明“自我”#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
答案 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)