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.

for item in self:

counts.setdefault(item, 0)

counts[item] += 1

return counts

Ao criar uma subclasse list, herdamos toda a funcionalidade-padrão do objeto

list e preservamos sua semântica, familiar a todo programador Python. Seus

métodos adicionais implementam qualquer comportamento personalizado que se

queira.

foo = FrequencyList(['a', 'b', 'a', 'c', 'b', 'a', 'd'])

print('Length is', len(foo))

foo.pop()

print('After pop:', repr(foo))

print('Frequency:', foo.frequency())

>>>

Length is 7

After pop: ['a', 'b', 'a', 'c', 'b', 'a']

Frequency: {'a': 3, 'c': 1, 'b': 2}

Agora, imagine que se queira criar um objeto que se pareça e se comporte como

uma list, permitindo que seja indexada, mas que não seja uma subclasse de list.

Por exemplo, digamos que se queira providenciar semântica de sequência (como

a de list ou tuple) para uma classe de árvore binária.

class BinaryNode(object):

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

self.value = value

self.left = left

self.right = right

Como fazer uma árvore binária se comportar como uma sequência? O Python

implementa seus comportamentos de contêiner com métodos de instância que

têm nomes especiais. Quando acessamos um item pelo seu índice:

bar = [1, 2, 3]

bar[0]

o interpretador entende da seguinte maneira:

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!