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 Person
classe:
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 Person
classe possui o name
atributo e o greet()
método.
Agora, você deseja definir o Employee
que é semelhante à Person
classe:
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 Employee
classe tem dois atributos name
e job_title
. Ele também possui o greet()
método que é exatamente igual ao greet()
método da Person
classe.
Para reutilizar o greet()
método da Person
classe na Employee
classe, você pode criar um relacionamento entre as classes Person
e Employee
. Para fazer isso, você usa herança para que a Employee
classe herde da Person
classe.
O seguinte redefine a Employee
classe que herda da Person
classe:
class Employee(Person):
def __init__(self, name, job_title):
self.name = name
self.job_title = job_title
Linguagem de código: Python ( python )
Ao fazer isso, a Employee
classe se comporta da mesma forma que a Person
classe sem redefinir o método greet().
Esta é uma herança única porque Employee
herda de uma única classe ( Person
). Observe que Python também suporta heranças múltiplas onde uma classe herda de múltiplas classes.
Como Employee
herda atributos e métodos da Person
classe, você pode usar a instância da classe Employee como se fosse uma instância da Person
classe.
Por exemplo, o seguinte cria uma nova instância da Employee
classe 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 John
Linguagem de código: Python ( python )
Terminologia de herança
A Person
classe é a classe pai , a classe base ou a superclasse da Employee
classe. E a Employee
classe é uma classe filha , uma classe derivada ou uma subclasse da Person
classe.
A Employee
classe deriva , estende ou subclassifica a Person
classe.
O relacionamento entre a Employee
classe e Person
a 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 Person
e 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)) # False
Linguagem de código: Python ( python )
Saída:
True
True
True
False
Linguagem de código: Python ( python )
Conforme mostrado claramente na saída:
- A
person
é uma instância daPerson
classe. - A
employee
é uma instância daEmployee
classe. Também é uma instância daPerson
classe. - O
person
não é uma instância daEmployee
classe.
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)) # True
Linguagem de código: Python ( python )
O seguinte define a SalesEmployee
classe que herda da Employee
classe:
class SalesEmployee(Employee):
pass
Linguagem de código: Python ( python )
The SalesEmployee
é a subclasse da Employee
classe. Também é uma subclasse da Person
classe, conforme mostrado a seguir:
print(issubclass(SalesEmployee, Employee)) # True
print(issubclass(SalesEmployee, Person)) # True
Linguagem 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 Person
classe herda implicitamente da object
classe. Portanto, é uma subclasse da object
classe:
print(issubclass(Person, object)) # True
Linguagem de código: Python ( python )
Em outras palavras, todas as classes são subclasses da object
classe.
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.