Duck Typing in Python-3 Practical Examples

Practical Examples

In Python, iteration allows us to go over a list of items to perform particular operations. Uma maneira comum de criar uma iteração é usar os loops for, que têm o seguinte formato geral.

for i in iterable:
expression

como discutido no meu artigo anterior, podemos criar os nossos iteradores personalizados que podem ser usados como iterables nos loops for. Para satisfazer o “teste do pato” para iteradores, a classe personalizada precisa implementar os métodos __iter__() e __next__(). Um exemplo específico é dado abaixo.

Duck Typing em Iteradores

No trecho de código acima, temos implementado __iter__() e __next__() métodos que fazem as instâncias da classe personalizada Cubes iteradores, de tal forma que a instância foi capaz de ser utilizado em um for loop.

Callables

além do tipo de dados incorporado dict, outro importante tipo de dicionário é defaultdict, disponível no módulo collections. Este tipo de dados tipo dicionário tem o seguinte construtor: defaultdict(]). Especificamente, o argumento default_factory é um tipo de chamável, como uma função ou função lambda.

In my previous article, I showed that we could use the defaultdict by passing a lambda function. Aqui está o exemplo de seu uso.

>>> from collections import defaultdict
>>> letter_counts = defaultdict(lambda: 0)
>>> for i in 'abcddddeeeee':
... letter_counts += 1
...
>>> letter_counts.items()
dict_items()

notavelmente, podemos ter maior flexibilidade para usar o tipo de dados defaultdict se criarmos a nossa própria fábrica padrão. Com a filosofia “duck typing”, a classe personalizada precisa implementar o método __call__(), que é fazer algo chamável. Vamos ver como funciona.

Duck Typing in Callables

As shown in the above code, we create the DucklingFactory class, whose __call__() function returns a list of one Duckling instance. Usando esta função de fábrica, seremos capazes de fazer o número desejado de patinhos multiplicando a lista padrão de patinhos.

ordenação com Len ()

Outra Possível utilização de dactilografia de pato é implementar a função custom len(), que pode ser usada na ordenação de uma lista usando a função sort(). Como uma nota lateral, algumas pessoas se referem à função len() como uma função mágica, porque ela é implementada chamando a função __len__() por trás da cena (aquelas funções com duplo underscores como prefixo e sufixo são chamadas de funções mágicas).

suponha que queremos classificar uma lista de patos com base no comprimento do nome de cada pato. Aqui está como podemos aplicar a datilografia de pato neste caso.

Duck Typing in Sorting

In the above code snippet, the custom NamedDuck class implements the __str__() and __len__() functions, which enable us to use the str() and len() functions on its instances in Lines 10 and 12, respectively. Importante, como você pode ver, embora a lista esteja misturada com patos e strings nomeados, todos os elementos podem chamar as funções str() e len(), de modo que a lista pode ser ordenada usando o len() como a chave e usado na compreensão da lista quando queremos imprimir o resultado ordenado.

assim, a implicação mais ampla deste uso é que quando temos uma lista mista de elementos de diferentes tipos de dados, desde que cada tipo de dados implemente as mesmas funções, os elementos passarão no teste do pato e serão aplicados com as operações adequadas. Aqui está um exemplo de caso de uso geral usando a função len() em uma lista mista de tipos de dados de str, tuple, e list.

>>> mixed_list = ]
>>> mixed_list.sort(key=len)
>>> mixed_list
, (1, 2), 'Amazing']

You might also like

Deixe uma resposta

O seu endereço de email não será publicado.