Curso de programação em Python aula 18 – Herança em Python

Bem vindos á décima oitava aula do curso de programação em Python do INFOmoz

\r\n\r\nEste artigo faz parte do curso de programação em Python do INFOmoz. Para acessar outras aulas do curso, por favor visite o índice do curso de programação em Python .\r\n

OBJETIVOS DA AULA:

\r\n

\r\n
\r\n\r\n
    \r\n

  • Conceito de herança
  • \r\n

  • Herança múltipla em Python
  • \r\n

  • Exemplos
  • \r\n

\r\nNa aula passada vimos os principais conceitos da orientação a objetos: Os atributos e métodos. Hoje vamos continuar a falar sobre conceitos da orientação a objetos, sobretudo de um conceito um pouco mais complexo que os das aulas passadas, a herança entre classes em Python.\r\n\r\nNa natureza podemos encontrar vários exemplos concretos de herança, desde as galinhas que herdam o atributo penas do conjunto das aves, até aos cachorros que herdam o atributo andar dos animais. Se quiseres um exemplo mais moderno, as pessoas herdam fortunas de seus parentes! O Problema agora esta em traduzir estas informações para as nossas classes, pois em Python também criamos uma classe Cachorros e podíamos ter uma classe Animais, então escrever um método andar na classe Cachorros e outro na classe Animais não seria boa idéia pois um dos objetivos da Orientação a Objetos é a simplificação do código.\r\nÉ dai que aparece o conceito de Herança. Vamos tentar dar uma noção um pouco mais clara e simples de herança: Herança é a capacidade que uma classe tem de herdar atributos e métodos de outras classes. Claro não???\r\n\r\nPython também suporta herança(também!!!)!!!\r\nPara dar um exemplo prático vamos criar três classes: Pai, Filho e Filha, Todas tem os atributos nome, sobrenome, residencia e cor dos olhos. Faremos isso sem usar herança primeiro.\r\n

\r\nclass Pai:\r\n    def __init__(self):\r\n        self.nome=”Jose”\r\n        self.sobrenome=”Leonardo”\r\n        self.idade=”42”\r\n        self.morada=”Bairro 4”\r\n        self.cor_olhos=”Castanhos”\r\n    #metodos adicionais podem ser acrescentados\r\n\r\nclass Filho:\r\n    def __init__(self):\r\n\r\n        self.nome=”Carlos”\r\n\r\n        self.sobrenome=”Leonardo”\r\n\r\n        self.idade=”22”\r\n\r\n        self.morada=”Bairro 4”\r\n\r\n        self.cor_olhos=”Castanhos”\r\n\r\n    #metodos adicionais podem ser acrescentados\r\n\r\nclass Filha:\r\n\r\n    def __init__(self):\r\n\r\n        self.nome=”Tania”\r\n\r\n        self.sobrenome=”Leonardo”\r\n\r\n        self.idade=”20”\r\n\r\n        self.morada=”Bairro 4”\r\n\r\n        self.cor_olhos=”Azuis”\r\n\r\n    #metodos adicionais podem ser acrescentados\r\n

\r\nComo podemos ver, as classes Pai,Filho e Filha Possuem os mesmos atributos e o atributo sobrenome e residencia possui o mesmo valor para todas as classes. Com o auxilio de herança podemos simplificar a declaração destas classes, dizendo: A residencia dos filhos é a mesma que a residencia do pai, e todos possuem o mesmo sobrenome, ou seja os filhos herdam o sobrenome do Pai(herdam!!!).\r\n\r\nPara fazer isso, vamos antes ver a sintaxe de herança em Python. Em Python para mostrar que uma classe X herda propriedades da classe Y usamos a seguinte sintaxe:\r\n

class X(Y):\r\n …\r\n

\r\nRefazendo as classes acima agora com o auxilio de herança teremos:\r\n

\r\nclass Pai:\r\n\r\n    def __init__(self):\r\n\r\n        self.nome="Nome do Pai"\r\n\r\n        self.sobrenome="Sobrenome da familia"\r\n\r\n        self.idade=42\r\n\r\n        self.morada="Morada da familia"\r\n\r\n        self.cor_olhos="castanhos"\r\n\r\n    #metodos adicionais podem ser acrescentados\r\n\r\nclass Filho(Pai):\r\n\r\n    def __init__(self):\r\n\r\n        Pai.__init__() #Temos de invocar o construtor da classe mae!\r\n\r\n        self.nome="Nome do filho"\r\n\r\n        self.idade=22\r\n\r\n    #metodos adicionais podem ser acrescentados\r\n\r\nclass Filha(Pai):\r\n\r\n    def __init__(self):\r\n\r\n        Pai.__init__()\r\n\r\n        self.nome="Nome da filha"\r\n\r\n        self.idade=20\r\n\r\n        self.cor_olhos="Azuis"\r\n\r\n    #metodos adicionais podem ser acrescentados\r\n

\r\n\r\nVamos dar uma volta ao IDLE para ver o comportamento destas classes depois da herança:\r\n

\r\n>>>pai=Pai()\r\n>>>filho=Filho()\r\n>>>filha=Filha() #Instancias. Lembra!!!\r\n>>>>pai.nome\r\n ‘Nome do pai’\r\n>>>filho.nome\r\n ‘Nome do Fliho’\r\n #Cada um com o seu nome\r\n>>>pai.sobrenome\r\n ‘Sobrenome da Familia’\r\n>>>filha.sobrenome\r\n ‘Sobrenome da Familia’\r\n #Filha herdou o sobrenome do Pai\r\n\r\n>>>pai.olhos\r\n ‘castanhos’\r\n >>>filho.olhos\r\n ‘castanhos’\r\n #Outra herança\r\n\r\n>>>filha.olhos\r\n ‘azuis’\r\n #????\r\n

\r\nNem sempre uma classe que herda atributos de uma outra classe tem exatamente os mesmos valores para os atributos, neste caso, precisamos indicar este valor na classe derivada, veja o que aconteceu com o atributo olhos da Filha!\r\n\r\nJá dá para notar que normalmente a classe mãe, também chamada de superclasse deve conter atributos comuns ás suas classes derivadas ou subclasses.\r\n\r\nA herança não é válida apenas para atributos, mas métodos também podem ser herdados entre classes na orientação á objetos, Python em particular. Como dissemos no início da aula, galinhas herdam o método voar da classe das aves. Experimente estes conceitos usando o IDLE que você verá do que se está a falar.\r\n

Herança múltipla em Python

\r\nVamos imaginar que pretendemos criar uma classe inimigo para um jogo e as instâncias desta classe são monstros ‘metade humano e metade animal’. Já temos as classes Humano e Animal bem definidas, então seria necessário estabelecer uma herança destas classes para a classe Inimigo. Ao contrário de outras linguagens orientadas a objecto, Python suporta herança múltipla, o que quer dizer que uma classe pode herdar propriedades de várias classes simultaneamente. Isso quer dizer que é válido fazer:\r\n

\r\nclass Inimigo(Humano,Animal):\r\n ….\r\n

\r\nComo dissemos acima, herança não só é válida para atributos, mas também para métodos! Então tente fazer, com ajuda do Google, este pequeno exercício para terminar a nossa aula de hoje:\r\n[text]Temos três classes: Automovel, Carro e Motorizada,\r\nonde os atributos e métodos comuns estão declaradas na classe Automovel.\r\nCrie estas três classes, não se esquecendo de colocar um construtor em cada classe.[/text]\r\nQualquer dúvida ou sugestão deixe o seu comentário aqui no INFOmoz\r\n\r\nPara a próxima aula, a última do curso, veremos sobrecarga de operadores. No fim mostrarei uma referência dos próximos passos que poderemos seguir para continuar com a nossa jornada de aprender Python, a melhor linguagem de programação do mundo.\r\n\r\nAté lá!!!

\r\n\r\n\r\n
\r\n
\r\n
\r\n

Receba nossas actualizações por email

\r\n
\r\n \r\n \r\n
\r\n

Ver Campanhas anteriores.

\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
(Visited 49 times, 1 visits today)
Share