15.12.2022 Views

Python Eficaz

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

• Referências a funções e métodos em Python são de primeira classe, o que

significa poderem ser usadas em expressões como qualquer outro tipo de

dados.

• O método especial __call__ permite chamar instâncias de classes como se

fossem funções comuns do Python.

• Quando precisar de uma função para armazenar estados, considere definir

uma classe que ofereça o método __call__ em vez de definir um closure que

guarde estado (consulte o Item 15: “Saiba como os closures interagem com

os escopos das variáveis”).

Item 24: Use o polimorfismo de @classmethod para

construir objetos genericamente

No Python, não são apenas os objetos que suportam polimorfismo: as próprias

classes também podem sofrer mutação. O que isso significa, e para que isso

serve?

O polimorfismo é uma maneira de múltiplas classes em uma hierarquia

implementar suas próprias versões únicas de um mesmo método. Isso permite

que muitas classes preencham a mesma interface ou classe abstrata básica ao

mesmo tempo em que oferece funcionalidade diferente (consulte o Item 28:

“Herde da classe collections.abc para obter tipos de contêiner personalizados”

para ver um exemplo).

Por exemplo, digamos que se queira escrever uma implementação de

MapReduce e se quer uma classe comum para representar os dados de entrada.

No exemplo a seguir, definimos uma classe como essa com um método read que

deve ser definido por subclasses:

class InputData(object):

def read(self):

raise NotImplementedError

No código seguinte, definimos uma subclasse concreta de InputData que lê os

dados de um arquivo no disco:

class PathInputData(InputData):

def __init__(self, path):

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!