Herança Python

Resumo : neste tutorial, você aprenderá sobre herança Python e como usar a herança para reutilizar código de uma classe existente.

Introdução à herança Python

A herança permite que uma classe reutilize a lógica de uma classe existente. Suponha que você tenha a seguinte Personclasse:

class Person:
    def __init__(self, name):
        self.name = name

    def greet(self):
        return f"Hi, it's {self.name}"Linguagem de código:  Python  ( python )

A Personclasse possui o nameatributo e o greet()método.

Agora, você deseja definir o Employeeque é semelhante à Personclasse:

class Employee:
    def __init__(self, name, job_title):
        self.name = name
        self.job_title = job_title

    def greet(self):
        return f"Hi, it's {self.name}"Linguagem de código:  Python  ( python )

A Employeeclasse tem dois atributos namee job_title. Ele também possui o greet()método que é exatamente igual ao greet()método da Personclasse.

Para reutilizar o greet()método da Personclasse na Employeeclasse, você pode criar um relacionamento entre as classes Persone Employee. Para fazer isso, você usa herança para que a Employeeclasse herde da Personclasse.

O seguinte redefine a Employeeclasse que herda da Personclasse:

class Employee(Person):
    def __init__(self, name, job_title):
        self.name = name
        self.job_title = job_titleLinguagem de código:  Python  ( python )

Ao fazer isso, a Employeeclasse se comporta da mesma forma que a Personclasse sem redefinir o método greet().

Esta é uma herança única porque Employeeherda de uma única classe ( Person). Observe que Python também suporta heranças múltiplas onde uma classe herda de múltiplas classes.

Como Employeeherda atributos e métodos da Personclasse, você pode usar a instância da classe Employee como se fosse uma instância da Personclasse.

Por exemplo, o seguinte cria uma nova instância da Employeeclasse e chama o greet()método:

employee = Employee('John', 'Python Developer')
print(employee.greet())Linguagem de código:  Python  ( python )

Saída:

Hi, it's JohnLinguagem de código:  Python  ( python )

Terminologia de herança

A Personclasse é a classe pai , a classe base ou a superclasse da Employeeclasse. E a Employeeclasse é uma classe filha , uma classe derivada ou uma subclasse da Personclasse.

A Employeeclasse deriva , estende ou subclassifica a Personclasse.

O relacionamento entre a Employeeclasse e Persona classe é o relacionamento IS-A . Em outras palavras, um funcionário é uma pessoa.

tipo vs. isinstance

O seguinte mostra o tipo de instâncias das classes Persone Employee:

person = Person('Jane')
print(type(person))

employee = Employee('John', 'Python Developer')
print(type(employee))Linguagem de código:  Python  ( python )

Saída:

<class '__main__.Person'>
<class '__main__.Employee'>Linguagem de código:  Python  ( python )

Para verificar se um objeto é uma instância de uma classe, você usa o isinstance()método. Por exemplo:

person = Person('Jane')
print(isinstance(person, Person))  # True

employee = Employee('John', 'Python Developer')
print(isinstance(employee, Person))  # True
print(isinstance(employee, Employee))  # True
print(isinstance(person, Employee))  # FalseLinguagem de código:  Python  ( python )

Saída:

True
True
True
FalseLinguagem de código:  Python  ( python )

Conforme mostrado claramente na saída:

  • A personé uma instância da Personclasse.
  • A employeeé uma instância da Employeeclasse. Também é uma instância da Personclasse.
  • O personnão é uma instância da Employeeclasse.

Na prática, você usará frequentemente a isinstance()função para verificar se um objeto possui determinados métodos. Então, você chamará os métodos desse objeto.

ésubclasse

Para verificar se uma classe é uma subclasse de outra classe, você usa a issubclass()função. Por exemplo:

print(issubclass(Employee, Person)) # TrueLinguagem de código:  Python  ( python )

O seguinte define a SalesEmployeeclasse que herda da Employeeclasse:

class SalesEmployee(Employee):
    passLinguagem de código:  Python  ( python )

The SalesEmployeeé a subclasse da Employeeclasse. Também é uma subclasse da Personclasse, conforme mostrado a seguir:

print(issubclass(SalesEmployee, Employee)) # True
print(issubclass(SalesEmployee, Person)) # TrueLinguagem de código:  Python  ( python )

Observe que quando você define uma classe que não herda de nenhuma classe, ela herdará implicitamente da classe interna object.

Por exemplo, a Personclasse herda implicitamente da objectclasse. Portanto, é uma subclasse da objectclasse:

print(issubclass(Person, object)) # TrueLinguagem de código:  Python  ( python )

Em outras palavras, todas as classes são subclasses da objectclasse.

Resumo

  • A herança permite que uma classe reutilize atributos e métodos existentes de outra classe.
  • A classe que herda de outra classe é chamada de classe filha, subclasse ou classe derivada.
  • A classe da qual outras classes herdam é chamada de classe pai, superclasse ou classe base.
  • Use isinstance()para verificar se um objeto é uma instância de uma classe.
  • Use issubclass()para verificar se uma classe é uma subclasse de outra classe.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *