Oi Daniel, tudo certo?
Mesmo não existindo uma palavra reservada no Python para interface
, toda classe tem uma interface
que são seus métodos públicos. Outra definição complementar é que uma interface é o subconjunto dos métodos públicos de um objeto que lhe permitem desempenhar um papel específico - o que chamamos também de protocolo. E os protocolos são independentes de herança. Por isso deve causar uma certa confusão aqui quando você fala " pegou um comportamento de um objeto sem ser ou ter esse objeto". É assim que são as interfaces quando adotamos o duck typing
.
O método especial __getitem__
desempenha um papel específico e todo objeto que possui uma implementação deste pode ser considerado "iterável". O mesmo vale para o método __iter__
e você pode ler mais a respeito na PEP234: https://www.python.org/dev/peps/pep-0234/
Se uma classe implementa __getitem__
e nada mais, somos capazes de fazer uma iteração por ela e o operador in
funciona (já que ele exige esse comportamento para funcionar).
Data Model
Um modelo de dados (ou datamodel
) é um modelo abstrato que organiza elementos de dados e padroniza como eles se relacionam entre si. Todos os dados em um programa Python são representados por objetos ou por relações entre objetos. Uma classe pode implementar certas operações que são invocadas por uma sintaxe especial (como operações aritméticas), definindo métodos com nomes especiais (como o __getitem__
). Essa é a abordagem do Python à sobrecarga de operadores, permitindo que as classes definam seu próprio comportamento em relação aos operadores da linguagem.
Duck Typing
Uma característica de linguagens dinâmicas como Python é a chamada Duck Typing
, a tipagem de pato. É uma característica de um sistema de tipos em que a semântica de uma classe é determinada pela sua capacidade de responder a alguma mensagem, ou seja, responder a determinado atributo (ou método). O exemplo canônico (e a razão do nome) é o teste do pato: se ele se parece com um pato, nada como um pato e grasna como um pato, então provavelmente é um pato.
O Duck Typing
é um estilo de programação que não procura o tipo do objeto para determinar se ele tem a interface correta. Ao invés disso, o método ou atributo é simplismente chamado ou usado ('se parece como um pato e grasna como um pato, então deve ser um pato').
Se ainda permaneceu alguma dúvida é só postar aqui novamente! Espero ter ajudado e bons estudos!