Introdução Link para o cabeçalho
Este post está relacionado a uma palestra ministrada no XVI encontro da comunidade mineira de Python, e aqui foi divida em partes para evitar que fique massante e cansativa.
Cada parte será postada em uma semana.
Existe um repositório onde exemplifico tudo que for colocado aqui além de explicar mais detalhadamente como e por que as coisas acontecem.
A parte 2 pode ser encontrada aqui.
Sobrecargas Link para o cabeçalho
Como segundo assunto falaremos sobre sobrecargas de operadores e métodos.
Sobrecarga de operadores Link para o cabeçalho
Tudo é objeto em python, como tal, quando eu utilizo um operador sobre qualquer coisa, na verdade estou invocando o “dunder” método correspondente àquele operador.
Ex:
a = 4
print(a + 4)
# é o mesmo que
print(a.__add__(4))
Quando falamos em sobrecarga de método, significa modificar estas funções especiais que o interpretador utiliza, para prover um comportamento diferente.
Normalmente respondendo a tipos diferentes com valores diferentes.
Por exemplo as strings em python são sobrecarregadas, quando diantes do operador de multiplicaçao ‘*’ e o oerando é um inteiro, ele realiza a replicação do valor e sua eventual concatenação.
print('3'* 3)
# 333
Sobrecarga de métodos Link para o cabeçalho
Um mesmo método, responde de diferentes maneiras de acordo com a sua assinatura. Por exemplo, um método se comporta de uma maneira quando recebe uma string e de outra, quando recebe uma instância de Objeto qualquer.
search('Patriots') # invoca um método
search(['Patriots', 'NFL', 'Futebol Americano']) # outro método é invocado
No python isto é feito através de singledispatch da biblioteca functools. Há uma função(dispatcher) que invoca a função correspondente de acordo com o tipo do parâmetro recebido.
Post curto neh?
Foi proposital, este assunto é melhor explicado na prática, então não perca tempo e veja este arquivo.
Clique aqui para ir até a parte 4.
Caso algo não esteja devidamente explicado, por favor reporte abrindo uma issue que farei o aprimoramento da explicação.
Então é isso pessoal!
Até a próxima!
{}’s