15.12.2022 Views

Python Eficaz

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

dado em JSON para qualquer objeto do Python.

Uma maneira de permitir isso é incluir o nome da classe original do objeto que

está sendo serializado junto com seus dados no documento JSON.

class BetterSerializable(object):

def __init__(self, *args):

self.args = args

def serialize(self):

return json.dumps({

'class': self.__class__.__name__,

'args': self.args,

})

def __repr__(self):

# ...

É preciso ainda manter um mapa que relacione os nomes das classes aos

construtores apropriados para cada um desses objetos. A função genérica

deserialize deve funcionar para quaisquer classes repassadas a register_class.

registry = {}

def register_class(target_class):

registry[target_class.__name__] = target_class

def deserialize(data):

params = json.loads(data)

name = params['class']

target_class = registry[name]

return target_class(*params['args'])

Para assegurar que deserialize sempre funcione corretamente, é preciso chamar

register_class para cada classe que se queira desserializar no futuro.

class EvenBetterPoint2D(BetterSerializable):

def __init__(self, x, y):

super().__init__(x, y)

self.x = x

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!