Herança de Classe em Python - Entenda Como Funciona - Programadores Brasil
Linguagens de programaçãoPython

Herança de Classe em Python – Entenda Como Funciona

5 Mins read

A herança de classe é a capacidade de uma classe herdar ou derivar propriedades de uma outra classe em programação orientada a objeto e veremos como fazer isso em Python. Entre os benefícios da herança estão:

  • Representa bem relacionamentos entre coisas do mundo real;
  • Possibilita a reutilização de código, não sendo necessário repetir o mesmo código várias vezes. Além disso, é possível acrescentar características à sua classe sem precisar modificá-la.
  • Herança de classe é transitiva, o que significa que se uma classe A é subclasse de B e C é uma subclasse de A, então C é uma subclasse de B também e herda propriedades dela.

A classe que herda propriedades de outra é chamada de subclasse, classe derivada ou classe filha, já a que tem suas características herdadas é chamada de superclasse, classe pai ou classe base.

Vamos aprender herança de classe em Python 3!
Vamos aprender herança de classe em Python 3!

(AMAZON) Iphones em promoção -> Veja também: [+] Iphones de diversos modelos com super desconto na Amazon.

(AMAZON) Apple Watch -> Veja também: [+] Compre seu Apple Watch com super desconto na Amazon.

Veja abaixo um exemplo de herança de classe em Python 3:

# Programa em Python para demonstrar herança de classes
   
# Super classe, note a classe "object" entre parênteses.
# "object" é a super classe de todas as classes.
# No Python 3.x "class Pessoa" é 
# equivalente a "class Pessoa(object)"
class Pessoa(object):
       
    # Construtor do objeto Pessoa
    def __init__(self, nome):
        self.nome = nome
   
    # Função para obter o nome de Pessoa
    def getNome(self):
        return self.nome
   
    # Função para verificar se Pessoa é um funcionário ou não
    def verificaFuncionario(self):
        return False
   
   
# Classe filha ou Subclasse
# Desta vez a classe Pessoa está entre parênteses

class Funcionario(Pessoa):
   
    # Aqui a função é sobrescrita, alterando o seu comportamento
    def verificaFuncionario(self):
        return True
   

p = Pessoa("João")  # Uma instância de Pessoa
print(p.getNome(), p.verificaFuncionario())
   
p = Funcionario("João")  # Uma instância de Funcionario
print(pessoa.getNome(), p.verificaFuncionario())

Resultado:

João False
João True

O que é a classe Object?

Assim como a classe Object de Java, a partir do Python 3.x, object é a classe base de todas as classes. Em Python 3.x, “class Teste(object)” e “class Test” são iguais. Porém, em Python 2.x, “class Teste(object)” cria uma classe com a classe object como classe pai e “class Teste” cria uma classe Python antiga, sem nenhuma classe pai.

(AMAZON) Smartphones de todas as marcas -> Veja também: [+] Os melhores Smartphones com super desconto na Amazon. Clique e confira.

Utilizando o construtor da classe pai

A classe filha precisa identificar quem é sua classe pai. Isto é feito ao colocar o nome da classe pai entre parênteses na linha de declaração da classe.

Ex: class nome_subclasse(nome_superclasse):

# Código em Python 3 para demonstrar como os construtores das classes pai
# são chamados.
  
# Classe Pai
class Pessoa( object ):    
  
        # __init__ é o construtor da classe
        # self é a própria classe
        def __init__(self, nome, numeroid):   
                self.nome = nome
                self.numeroid = numeroid
        def display(self):
                print(self.nome)
                print(self.numeroid)
  
# Classe Filha
class Funcionario( Pessoa):           
        def __init__(self, nome, numeroid, salario, cargo):
                self.salario = salario
                self.cargo = cargo
  
                # invocando o construtor da classe pai
                Pessoa.__init__(self, nome, numeroid) 
  
                  
# instanciando um objeto do tipo funcionário
func = Funcionario("José", 21081898, 2000, "Estagiário")    
  
# chamando uma função da classe Pessoa em um objeto do tipo Funcionário
func.display() 

Resultado:

José
21081898

‘func’ é uma instância da classe Funcionário que invoca a função __init__ desta classe, com nome, numeroid, salário e cargo. Em Python, cada classe herda de uma classe base chamada object. O construtor, ou seja, a função __init__ de uma classe é invocada quando criamos uma instância da classe. As variáveis definidas em __init __ são chamadas de variáveis de instância ou objetos.

Portanto, ‘nome’ e ‘numeroid’ são os objetos da classe Pessoa. Da mesma forma, ‘salário’ e ‘cargo’ são os objetos da classe Funcionário. Assim sendo, ‘nome’ e ‘numeroid’ também são objetos da classe Funcionário. Se você esquecer de invocar __init __ da classe pai, então suas variáveis de instância não estarão disponíveis para a classe filha.

O código abaixo demonstra este tipo de erro:

# Programa em Python 3 para demonstrar erro gerado
# ao esquecer de invocar __init__() da classe pai.
  
class A:
      def __init__(self, n = 'José'):
              self.nome = n
class B(A):
      def __init__(self, id):
              self.id= id
  
o = B(21)
print (o.nome)

Resultado:

Traceback (most recent call last):
  File "/home/de4570cca20263ac2c4149f435dba22c.py", line 12, in 
    print (o.nme)
AttributeError: 'B' object has no attribute 'nome'

Diferentes tipos de herança de classe

  • Herança simples: Quando uma classe filha herda de apenas uma classe pai, isso é chamado de herança simples. Vimos um exemplo acima;
  • Herança múltipla: Quando uma classe filha herda de várias classes pai, isso é chamado de herança múltipla. Ao contrário de Java e como C ++, Python suporta a herança múltipla. Especificamos todas as classes pai como uma lista separada por vírgulas entre parenteses.
# Programa em Python3 de exemplo de
# herança múltipla
class Base1(object):
    def __init__(self):
        self.str1 = "Exemplo1"
        print("Base1")
  
class Base2(object):
    def __init__(self):
        self.str2 = "Exemplo2"        
        print("Base2")
  
class Derivada(Base1, Base2):
    def __init__(self):
          
        # invocando construtores de Base1 e Base2
        Base1.__init__(self)
        Base2.__init__(self)
        print("Derivada")
          
    def printStrs(self):
        print(self.str1, self.str2)
         
  
ob = Derivada()
ob.printStrs()

Resultado:

Base1
Base2
Derivada
Exemplo1 Exemplo2
  • Herança multinível: quando temos um relacionamento de classes filha e neta.
# Programa em Python 3 para mostrar herança multinível
  
class Base(object):
      
    # Construtor de Base
    def __init__(self, nome):
        self.nome = nome
  
    # Função para obter o nome
    def getNome(self):
        return self.nome
  
  
# Classe que herda de Base
class Filha(Base):
      
    # Construtor de Filha
    def __init__(self, nome, idade):
        Base.__init__(self, nome)
        self.idade = idade
  
    # Função para obter a idade
    def getIdade(self):
        return self.idade
  
# Classe que herda de Filha e, transitivamente, de Base
class Neta(Filha):
      
    # Construtor de Neta
    def __init__(self, nome, idade, endereco):
        Filha.__init__(self, nome, idade)
        self.endereco = endereco
  
    # Função para obter o endereço
    def getEndereco(self):
        return self.endereco
  
n = Neta("Maria", 23, "rua exemplo")  
print(n.getNome(), n.getIdade(), n.getEndereco())

Resultado:

Maria 23 rua exemplo
  • Herança hierárquica: Mais de uma classe derivada é criada a partir de uma única classe base.
  • Herança híbrida: Combina mais de uma forma de herança.

Atributos privados de uma classe pai

Nem sempre é desejável que todos os atributos da classe pai sejam herdados pelas classes filhas. Para evitar que isso ocorra, tornamos estes atributos privados. Um atributo se torna privado se é precedido por dois caracteres de underline. Por exemplo:

# Programa em Python 3 para demonstrar atributos privados
# de uma classe pai
class Pessoa(object):
       def __init__(self):
              self.idade = 21
  
              # rg é um atributo privado
              self.__rg = 4265789    
class Funcionario(Pessoa):
       def __init__(self):
              self.idFuncionario = 847648
              C.__init__(self)
objeto1 = Funcionario()
  
print(object1.rg)   

Resultado:

File "/home/993bb61c3e76cda5bb67bd9ea05956a1.py", line 16, in 
    print (object1.rg)                     
AttributeError: type object 'Funcionario' has no attribute 'rg'

O erro acima ocorre porque um objeto da classe Funcionário não tem acesso ao atributo rg da classe Pessoa.

Veja o conteúdo do link abaixo para mais dicas de programação em Python!

Curso de Python para iniciantes ->  Veja também: [+] Pacote Python Faixa preta para iniciantes.

Esses outros cursos também podem te interessar:

Curso Completo para conserto de Notebooks -> Veja também: [+] Pacote Full Stack para Iniciantes em Programação.

Curso para Desenvolvimento de Games -> Veja também: [+] Curso completo de Desenvolvimento de Games


Deixe o seu comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Continue Lendo

Javascript Online: Top 5 Melhores Sites para programar

[Iniciantes] Aprenda a Como Fazer ForEach em Javascript

Next.js: Conheça o Framework para ReactJS

[Python] Criando um Layout Interativo com Tkinter

[Python] Construindo um Layout para seu App usando Tkinter

[Python] Tkinter - Aprenda a Programar em Python Com Interfaces Gráficas

[Iniciantes] Python List: Aprenda como Manipular as Listas

[Iniciantes] Veja Como Instalar o Python 3 no Windows

WooCommerce: Veja Como Criar Sua Loja Virtual Wordpress

Sistema SAP: Entenda o que é e Como Funciona