#python #json #kivy #storage #pickle
Вопрос:
Я пытаюсь сохранить объект в памяти, чтобы прочитать его позже, когда приложение снова откроется. С помощью JSONStore kivy я могу сохранить все атрибуты объекта, но я хотел бы сохранить сам объект.
Вот мой класс:
class Furniture(): _registry = [] def __init__(self, name, width, depth, height, color) -gt; None: self._registry.append(self) self.name = name self.width = width self.depth = depth self.height = height self.color = color
Как я это делаю сейчас:
store = JsonStore('furniture.json') f = Furniture('test', '1', '2', '3', 'red') store.put(f.name, width=f.width, depth=f.depth, height=f.height, color=f.color)
Что я хотел бы сделать:
store = JsonStore('furniture.json') f = Furniture('test', '1', '2', '3', 'red') store.put(f.name, obj=f)
Это не работает, потому что объекты не сериализуемы в формате JSON.
Я попытался использовать pickle для сериализации и десериализации объекта в строку:
store = JsonStore('furniture.json') f = Furniture('test', '1', '2', '3', 'red') serial = str(pickle.dumps(f)) store.put(f.name, obj=serial)
Кажется, это работает, но я видел много комментариев о том, что рассол не очень безопасен, и он кажется немного небрежным. Есть ли лучший способ сделать это?