sexta-feira, 4 de março de 2011

Dicas de Programação: Reescrevendo operadores em Python

O que eu acho mais legal em C++ é que ele permite reescrever operadores. Então, eu vi que dá para fazer o mesmo em Python!

Para um exemplo prático, vamos criar uma classe Fracao. Esta possui duas propriedades (numerador e denominador), um construtor com dois parâmetros inteiros, um método add (que faz a soma dos objetos da classe Fracao) e um método para transformar em string:

#Exemplo de como reescrever operadores
#Fracao é uma classe que define números fracionados
class Fracao:
    #Construtor da classe
    def __init__(self, numerador, denominador):
        #Cria e seta a propriedade numerador
        self.numerador = numerador
        #Cria e seta a propriedade denominador
        self.denominador = denominador

    #Reescreve o operador "+" (faz a soma de duas frações e retorna um resultado que também é uma fração)
    def __add__(self, f):
        resultado = Fracao(self.numerador * f.denominador + f.numerador * self.denominador, self.denominador * f.denominador)
        return resultado

    #Reescreve a função str para transformar os valores em string
    def __str__(self):
        return str(self.numerador) + "/" + str(self.denominador)

Agora, vamos executar as seguintes instruções:

a = Fracao(5,2)
b = Fracao(1,3)
c = a + b
print c

E veja o que aparece. (legal, não? :))

2 comentários:

Wandeson Ricardo disse...

qual significado da variavel 'f' em __add__ e como seu valor é obtido?

Takemura disse...

A variável f representa um outro objeto Fracao que será usado na adição, por exemplo, se tenho:

c = a + b

ele executará o método passando a e b:

__add__(a, b)

Este método é um dos que reescrevem operadores em Python. Se quiser mais informações, acesse:
https://docs.python.org/2/library/operator.html

Valeu! :)