В качестве отправной точки:
class Movement(EntityComponent):
def __init__(self):
# Default values
self.speed = 0
self.acceleration = 0
serializable_fields = [
('speed', int),
('acceleration', int)
]
def load(object, source):
for name, field_type in object.serialiable_fields:
settarr(object, name, field_type(source[name]))
def save(object):
target = PropertyTree()
for name, field_type in object.serializable_fields:
target[name] = str(getattr(object, name))
return target
По сути, создайте отдельную систему сохранения / загрузки, возможно, в классе EntityComponent.Просто предоставьте список данных для полей, чтобы сообщить системе, как сериализовать текущий объект.
Если вы не знакомы с ним, вы также можете проверить, как работает модуль Python для pickle.Я не рекомендую использовать его для чего-то кроме тривиальных случаев, но это может дать вам некоторые идеи.