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.

def __init__(self, name, tree_with_parent):

self.name = name

self.tree_with_parent = tree_with_parent

my_tree = NamedSubTree('foobar', root.left.right)

print(my_tree.to_dict()) # Impede laços infinitos

>>>

{'name': 'foobar',

'tree_with_parent': {'left': None,

'parent': 7,

'right': None,

'value': 9}}

Os mix-ins podem ser combinados. Por exemplo, digamos que se queira um

mix-in que gere uma serialização genérica de objetos JSON para qualquer classe.

Podemos fazê-lo se considerarmos que alguma classe ofereça o método to_dict

(que pode ou não ser fornecido pela classe ToDictMixin).

class JsonMixin(object):

@classmethod

def from_json(cls, data):

kwargs = json.loads(data)

return cls(**kwargs)

def to_json(self):

return json.dumps(self.to_dict())

Observe como a classe JsonMixin define tanto métodos de instância como

métodos de classe. Os mix-ins permitem introduzir ambos os tipos de

comportamento. Neste exemplo, os únicos requisitos de JsonMixin são o de que

a classe possua o método to_dict e que seu método __init__ aceite argumentos

por palavra-chave (consulte o Item 19: “Implemente comportamento opcional

usando palavras-chave como argumentos”).

Esse mix-in torna simples criar hierarquias de classes utilitárias que podem ser

serializadas tanto para JSON como a partir de JSON com uma quantidade

mínima de código de enchimento (clichê). Por exemplo, o código a seguir tem

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!