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.

No exemplo a seguir, definimos uma classe de exemplo que usa o mix-in para

fazer uma representação em formato de dicionário de uma árvore binária:

class BinaryTree(ToDictMixin):

def __init__(self, value, left=None, right=None):

self.value = value

self.left = left

self.right = right

Com a classe fica muito fácil traduzir para o formato dicionário um grande

número de objetos do Python.

tree = BinaryTree(10,

left=BinaryTree(7, right=BinaryTree(9)),

right=BinaryTree(13, left=BinaryTree(11)))

print(tree.to_dict())

>>>

{'left': {'left': None,

'right': {'left': None, 'right': None, 'value': 9},

'value': 7},

'right': {'left': {'left': None, 'right': None, 'value': 11},

'right': None,

'value': 13},

'value': 10}

O aspecto mais bacana dos mix-ins é que podemos tornar plugável essa sua

funcionalidade genérica, portanto os comportamentos podem ser modificados

sempre que necessário. Por exemplo, o código a seguir define uma subclasse de

BinaryTree que mantém uma referência à sua mãe. Essa referência circular pode

fazer com que a implementação default de ToDictMixin.to_dict entre em laço

infinito.

class BinaryTreeWithParent(BinaryTree):

def __init__(self, value, left=None,

right=None, parent=None):

super().__init__(value, left=left, right=right)

self.parent = parent

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!