Noivos, enfim Truques escondidos do Swing

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

Requerido

Requerido,escondido

Linkar esta publicação  |  Assine os comentários via o RSS


Calendário

Março 2006
S T Q Q S S D
    Abr »
 12345
6789101112
13141516171819
20212223242526
2728293031  

Minhas Publicações Recentes

Publicações por Mês

Estatísticas

Meta