Sobrecarga de Operadores em Python
27 de Março de 2006 às 17:26 Thiago | Enviar por e-mail Hits para esta publicação: 2102
Sobrecarga de operadores é uma ferramenta sintática extremamente útil. Os projetistas de Java resolveram expurgar essa facilidade da linguagem, já que é possível fazer com que o comando a + b pisque a tela, compacte todo o HD do usuário e multiplique a por b. C++ tem sobrecarga de operadores, que, em um código humanamente escrito, ajuda bastante a escrever código. O problema é definir os operadores em C++, pois isso é muito chato.
Em Python a sobrecarga de operadores é feita definindo métodos especiais nas suas classes. Por exemplo, dada uma classe Vetor:
class Vetor:
def __init__(self, x, y):
self.x = x
self.y = y
Basta definir o método __add__ para sobrecarregar o operador “+”:
def __add__(self, outro_vetor):
x = self.x + outro_vetor.x
y = self.y + outro_vetor.y
return Vetor(x, y)
Simples, né? É possível sobrecarregar adição, subtração, multiplicação, etc., inclusive funções especiais de Python, como unpacking.
Unpacking é o que Python faz quando encontra uma linha do tipo:
x, y = posicao
Neste caso, posicao deve ser um tipo seqüência, tipicamente uma lista ou tupla (par ordenado, no exemplo). Assim:
posicao = (15, 37)
x, y = posicao
print x
print y
Imprime:
15
37
A questão é que isso funciona com os tipos “primitivos” da linguagem, mas eu queria fazer isso com minha classe Vetor, pois é muito chato ter que ficar escrevendo:
x = vetor.x
y = vetor.y
ou:
x, y = vetor.x, vetor.y
Ao invés de:
x, y = vetor
Descobri que basta sobrecarregar o método __getitem__ para fazer isso:
def __getitemm__(self, i):
if i == 0:
return self.x
if i == 1:
return self.y
raise IndexError
Note que é preciso lançar a exceção se o índice pedido estiver fora do intervalo válido. Assim é possível fazer
x, y = vetor
e facilmente obter as coordenadas de um vetor.
Publicação arquivada em: Tecnologia
Enviar por e-mail | Hits para esta publicação: 2103
3 Comentários Faça seu próprio
1. Matheus | 28 de Março de 2006 às 14:21
Doidimais, Python rules a lot tratando-se de linguagens de script. Até comecei a aprender um pouquinho mas depois minha dedicação voltou-se mais para as coisas do meu trabalho, pra Pati e pro PS2.
2. carlos | 12 de Agosto de 2007 às 18:50
No sé en que idioma esta todo esto, pero muchas gracias por el código, me fue de gran utilidad para entender como funciona la sobrecarga de metodos en python
3. Thiago | 17 de Agosto de 2007 às 14:12
The texts are written in Portuguese. I am quite glad this post was useful for you! If you want to ask some question, please feel free to comment here.
Deixe um Comentário
Linkar esta publicação | Assine os comentários via o RSS