Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Exemplo de __add__ para adicionar item a lista

Não ficou clara a explicação e na internet não achei nada sobre o uso de add para adicionar item a lista. Se possível, podem colocar um exemplo? Obrigado!

5 respostas

Rodolpho,

Duck typing é um estilo de codificação de linguagens dinamicamente tipadas onde o tipo de uma variável não importa, contanto que seu comportamento seja o desejado. O nome "tipagem de pato" vem da expressão "se anda como pato, nada como um pato e faz quack como um pato, então provavelmente é um pato".

Quando criamos uma função ou um método em Python o tipo do parâmetro não é a parte importante, mas o que realmente importa é se o mesmo vai possuir os métodos e atributos esperados:

def realizar_operacao(operacao, **kwargs):
      operacao.realizar(**kwargs)

A função realizar_operacao é um exemplo de como duck typing é aplicado: ela recebe como parâmetro o objeto operacao e executa o método realiza sem se importar com o tipo do objeto.

É interessante notar que realizar_operacao utiliza a variável mágica **kwargs, que recebe qualquer número de parâmetros nominais após passado o objeto referente à operação, não importando quais sejam.

Essa função pode ser implementada para realizar uma transferência, como vemos a seguir:

transferencia = Transferencia()
realizar_operacao(
    transferencia,
    conta_origem='14725-8',
    conta_destino='85296-3',
    valor=10000
)

A função também pode ser implementada para realizar um depósito simples:

deposito = Deposito()
realiza_operacao(
    deposito,
    conta_destino='85296-3',
    valor=10000
)

FONTE:

DevMedia

Ignorância Zero - Aulas Python - 062 - POO IV: Herança, Super e Polimorfismo

58 Python Tutorial for Beginners | Duck Typing

Agradeço a resposta, mas não era essa a minha dúvida. Estou precisando de exemplo de add para adicionar item a lista.

solução!

Rodolpho,

Vou tentar ser mais claro: No Python, permitimos que o objeto defina o que significa ser adicionado. A expressão 3 + 3 é um açúcar sintático para chamar o método __add__ do tipo inteiro. É o mesmo que chamar int .__ add __ (3, 3) . Isso significa que, se você definir um método __add__ para uma de suas classes, poderá fazer todo tipo de coisa acontecer quando adicionar instâncias delas.

>>> 3 + 3
6
>>> int.__add__(3, 3)
6
>>> 

Grande parte da sintaxe do Python é açúcar para métodos subjacentes. Especialmente acesso a dados. O acesso a membros dos objetos do tipo sequence type objects e mapping type objects é feito usando o método __getitem__ desses objetos.

>>> a = [0,1,2,3]
>>> print(a[0])
0
>>> b = {'a': 0, 'b': 1}
>>> print(b['a'])
0
>>> 

No primeiro exemplo, usamos a sintaxe normal do Python. No segundo exemplo, fazemos o que o primeiro exemplo está fazendo por "debaixo dos panos" do interpretador. Se vc quiser saber mais tem que entrar em METAPROGRAMAÇÃO E DESCRITORES do Python. Sugiro ler o PYTHON FLUENTE - Luciano Ramalho

Beleza, Welton. Ficou mais claro sim. Muito obrigado pelos esclarecimentos. Abraços

Rodolpho,

Blz, Coloca a questão como resolvida. Por favor!