Arquivo para classe

Herança – orientação a objetos com python

Posted in Linux, Programação, Python with tags , , , , , on 22 / junho / 2008 by medeubranco

Atenção: se você ainda não sabe nada sobre orientação a objetos, leia o artigo anterior.

Uma característica legal de programação orientada a objetos é a Herança. Uma classe pode herdar características de outra (superclasse) e incluir suas próprias. A superclasse é mais genérica, a subclasse, que herda da superclasse, é mais especializada.

Usando o exemplo clássico dos livros e tutoriais de programação, imaginemos a superclasse “Animal”; “Mamífero” é uma subclasse de “Animal” e herda suas características. Mas “Mamífero” tem suas próprias características. “Felino” é uma subclasse de “Mamífero”; “Gato” é uma subclasse de “Felino”.

Herdando as características de “felino”, “Gato” herda também as de “Mamífero” e “Animal”. Mas gato mia e arranha o sofá, coisa que nem todo animal faz.

Em Python seria mais ou menos assim:

# definindo a classe Animal:
class Animal:
    def __init__(self):
        # codigo  para o init aqui
    # metodos de Animal aqui

#definindo a classe Mamifero, herdando de Animal
class Mamifero(Animal):
    def __init__(self):

# definindo Felino
class Felino(Mamifero):

# definindo Gato
class Gato(Felino):

No artigo sobre orientação a objetos, nós criamos a classe TiaVelha.

Agora vamos criar uma classe nova. É a Fofoqueira. Uma Fofoqueira é basicamente uma Tia Velha, mas que faz fofocas – nem toda tia velha faz fofocas. A Fofoqueira é especializada no leva-e-traz.

Acho que ficou implícito que, para criar uma Fofoqueira, basta pegar uma Tia Velha e adicionar a ela o leva-e-traz.

Vamos ao código. Se quiser executar o exemplo, primeiro crie uma pasta para nosso exercício. Salve nela o código da TiaVelha, do outro artigo, com o nome tiavelha.py.

Os métodos da Fofoqueira são leva(fofoca) e traz().

O método leva(fofoca) adiciona uma fofoca qualquer ao repertório de fofocas da Fofoqueira. A Fofoqueira não inventa nada; só repassa o que viu ou ouviu.

No método traz(), a fofoqueira solta de uma vez todas as fofocas do seu repertório.

from tiavelha import *
class fofoqueira(TiaVelha):
    def __init__(self,nome,idade):
        TiaVelha.__init__(self,nome, idade)
        self.fofocas=[]

    def leva(self,fofoca):
        self.fofocas.append(fofoca)

    def traz(self):
        for fofoca in self.fofocas:
            print fofoca

Na linha 1 importamos o conteudo do ‘módulo’ tiavelha. A classe TiaVelha agora está disponível no nosso código.

Na linha 2 a classe fofoqueira é definida; TiaVelha entre parêntesis indica que fofoqueira herda de TiaVelha.

Na linha 3 precisamos chamar o método __init__ da superclasse, pois __init__ sendo redefinido em fofoqueira substitui o método com o mesmo nome da superclasse.

Das linhas 7 a 12 colocamos os métodos típicos da fofoqueira.

Os métodos apresentar_se() e falar(), da TiaVelha estão disponíveis para fofoqueira.

Salve o códico como fofoqueira.py na mesma pasta onde salvou tiavelha.py.

Para concluir, vamos fazer um código que usa a classe fofoqueira:

import fofoqueira
lina=fofoqueira.fofoqueira('Alvelina',32)
lina.apresentar_se()
lina.falar()
lina.traz()
lina.leva( "A Luiza trocou de namorado de novo" )
lina.leva( "O Pedro terminou com a amante" )
lina.traz()