Herança do Python

O objetivo desta lição é fornecer uma compreensão da herança do Python usando exemplos.

Sintaxe:

Class BaseClass:
    {Body}
Class DerivedClass(BaseClass):
    {Body}

 

Herança do Python



Herança do Python

Quando falamos de herança do Python , ele nos permite criar uma classe que herda todos os seus métodos e propriedades de outra classe .

A classe pai é chamada de classe base porque é a classe da qual está sendo herdada.

As classes que herdam de outra classe são chamadas de classes filhas ou classes derivadas.


Herança de classe Python:

  1. A herança de classe permite que você reutilize o código de classes existentes. Ao criar uma nova classe herdada de uma classe base, você pode herdar atributos e métodos da classe base, reduzindo a duplicação de código e promovendo a modularidade.
  2. A herança permite criar classes especializadas que herdam e estendem a funcionalidade de uma classe base. Você pode adicionar novos atributos e métodos à classe derivada ou substituir os existentes para fornecer um comportamento especializado. Isso permite hierarquias de classe flexíveis e personalizáveis.
  3. A herança desempenha um papel crucial na obtenção de polimorfismo em Python. O polimorfismo permite que objetos de classes diferentes sejam tratados de forma intercambiável com base em uma interface comum ou classe base compartilhada. Isso promove a flexibilidade do código e simplifica a lógica do código, permitindo que os mesmos métodos sejam chamados em objetos diferentes com implementações variadas.
  4. A herança ajuda na organização do código criando uma estrutura hierárquica de classes relacionadas. Ele permite modelar relacionamentos do mundo real e abstrair atributos e comportamentos comuns em uma classe base. Isso promove a legibilidade do código, capacidade de manutenção e compreensão da estrutura subjacente.
  5. O Python suporta herança múltipla, o que significa que uma classe derivada pode herdar de várias classes base. Esse recurso permite combinar e herdar recursos de várias fontes, fornecendo flexibilidade e reutilização de código ainda maiores. No entanto, requer um gerenciamento cuidadoso para evitar ambigüidades ou conflitos na ordem de resolução do método.

Criando uma classe pai

Quando se trata de herança de classe Python , qualquer classe pode ser uma classe pai, então a sintaxe é idêntica.

Faça uma classe chamada Address, com as propriedades city_name e country_name , e um print_address :

Python Parent Class Example: 1 

1
2
3
4
5
6
7
8
9
10
11
class Address:
def __init__(mrx, city, karachi):
mrx.city_name = city
mrx.country_name = karachi
def print_address(mrx):
print(mrx.city_name, mrx.country_name)
#Apply the Address class, create an object and invoke the print_address method:
x = Address("New York,", " United States of America")
x.print_address()
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Agora crie uma classe chamada Student_detail , com as propriedades s_id , s_name e s_age , e um método print_detail :

Python Parent Class Example: 2 

1
2
3
4
5
6
7
8
9
10
11
class Student_detail:
def __init__(mrx, id, name, age):
mrx.s_id = id
mrx.s_name = name
mrx.s_age = age
def print_detail(mrx):
print(mrx.s_id, mrx.s_name, mrx.s_age)
x = Student_detail("20499 ", "Harry Maguire ", 19)
x.print_detail()
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Criando uma classe filha

Ao lidar com a herança de classe do Python , a classe pai é passada como um parâmetro ao criar uma classe filha para que a funcionalidade possa ser herdada dela.

Faça uma classe chamada Records que herde os atributos e funções da classe Student_detail :

Python Child Class Example: 1 

1
2
3
4
5
6
7
8
9
10
11
12
class Student_detail:
def __init__(mrx, id, name, age):
mrx.s_id = id
mrx.s_name = name
mrx.s_age = age
def print_detail(mrx):
print(mrx.s_id, mrx.s_name, mrx.s_age)
class Records(Student_detail): pass
x = Student_detail("20499 ", "Harry Maguire ", 19)
x.print_detail()
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Lembrete: quando você não precisar fornecer nenhum novo método ou atributo à classe, use a palavra-chave pass.

Portanto, as propriedades e os métodos da classe Student_detail também são compartilhados pela classe Records.

Agora, crie um objeto usando a classe Records e chame a função print_detail no objeto:

Python Child Class Example: 2 

1
2
3
4
5
6
7
8
9
10
11
12
class Student_detail:
def __init__(mrx, id, name, age):
mrx.s_id = id
mrx.s_name = name
mrx.s_age = age
def print_detail(mrx):
print(mrx.s_id, mrx.s_name, mrx.s_age)
class Records(Student_detail): pass
x = Records("20499 ", "Harry Maguire ", 19)
x.print_detail()
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Faça uma classe chamada Courses que herde os atributos e funções da classe Student_detail:

Python Child Class Example: 3 

1
2
3
4
5
6
7
8
9
10
11
12
class Student_detail:
def __init__(mrx, id, name, age):
mrx.s_id = id
mrx.s_name = name
mrx.s_age = age
def print_detail(mrx):
print(mrx.s_id, mrx.s_name, mrx.s_age)
class Courses(Student_detail): pass
x = Student_detail("20499 ", "Harry Maguire ", 19)
x.print_detail()
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Lembrete: quando você não precisar fornecer nenhum novo método ou atributo à classe, use a palavra-chave pass.

Portanto, as propriedades e os métodos da classe Student_detail também são compartilhados pela classe Courses.

Crie um objeto usando a classe Courses e chame a função print_detail no objeto:

Python Child Class Example: 4 

1
2
3
4
5
6
7
8
9
10
11
12
class Student_detail:
def __init__(mrx, id, name, age):
mrx.s_id = id
mrx.s_name = name
mrx.s_age = age
def print_detail(mrx):
print(mrx.s_id, mrx.s_name, mrx.s_age)
class Courses(Student_detail): pass
x = Courses("20499 ", "Harry Maguire ", 19)
x.print_detail()
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 


Adicionar função __init__()

A partir de agora, desenvolvemos uma classe filha na herança do Python que recebe propriedades e métodos de seu pai.

Para a classe filha, queremos adicionar a função __init__() (em vez da palavra-chave pass ).

Lembrete: Quando a classe é usada para criar um novo objeto, a função __init__() é invocada imediatamente.

Insira o método __init__() na classe Records:

__init__() Function Example: 1 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Student_detail:
def __init__(mrx, id, name, age):
mrx.s_id = id
mrx.s_name = name
mrx.s_age = age
def print_detail(mrx):
print(mrx.s_id, mrx.s_name, mrx.s_age)
class Records(Student_detail):
def __init__(mrx, id, name, age):
Student_detail.__init__(mrx, id, name, age)
#insert properties etc.
x = Records("20499 ", "Harry Maguire ", 19)
x.print_detail()
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

A classe filha não herdará mais a função __init__() do pai se você inserir a função __init__() .

O método __init__() do filho substitui a herança do método __init__() do pai.

Adicione uma chamada ao método __init__() do pai para manter a herança da função __init__() do pai:

__init__() Function Example: 2 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Student_detail:
def __init__(mrx, id, name, age):
mrx.s_id = id
mrx.s_name = name
mrx.s_age = age
def print_detail(mrx):
print(mrx.s_id, mrx.s_name, mrx.s_age)
class Records(Student_detail):
def __init__(mrx, id, name, age):
Student_detail.__init__(mrx, id, name, age)
x = Records("20499 ", "Harry Maguire ", 19)
x.print_detail()
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

__init__() Function Example: 3 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Student_detail:
def __init__(mrx, id, name, age):
mrx.s_id = id
mrx.s_name = name
mrx.s_age = age
def print_detail(mrx):
print(mrx.s_id, mrx.s_name, mrx.s_age)
class Courses(Student_detail):
def __init__(mrx, id, name, age):
Student_detail.__init__(mrx, id, name, age)
x = Courses("20499 ", "Harry Maguire ", 19)
x.print_detail()
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Agora que a função __init__() foi implementada corretamente e a herança da classe pai foi mantida, podemos começar a adicionar funcionalidade à função.


Usando a função super()

Quando se trata de herança do Python , há também uma função super() que permitirá que a classe filha herde todos os métodos e propriedades de seu pai:

Super() Function Example: 1 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Student_detail:
def __init__(mrx, id, name, age):
mrx.s_id = id
mrx.s_name = name
mrx.s_age = age
def print_detail(mrx):
print(mrx.s_id, mrx.s_name, mrx.s_age)
class Records(Student_detail):
def __init__(mrx, id, name, age):
super().__init__(id, name, age)
x = Records("20499 ", "Harry Maguire ", 19)
x.print_detail()
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Super() Function Example: 2 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Student_detail:
def __init__(mrx, id, name, age):
mrx.s_id = id
mrx.s_name = name
mrx.s_age = age
def print_detail(mrx):
print(mrx.s_id, mrx.s_name, mrx.s_age)
class Courses(Student_detail):
def __init__(mrx, id, name, age):
super().__init__(id, name, age)
x = Courses("20499 ", "Harry Maguire ", 19)
x.print_detail()
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Você não precisa especificar o nome do elemento pai ao usar a função super() porque o elemento filho receberá imediatamente os métodos e propriedades de seu pai.


Adicionar propriedades

Crie uma propriedade chamada cgpa na classe Records :

Python Inheritance Add Property Example: 1 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Student_detail:
def __init__(mrx, id, name, age):
mrx.s_id = id
mrx.s_name = name
mrx.s_age = age
def print_detail(mrx):
print(mrx.s_id, mrx.s_name, mrx.s_age)
class Records(Student_detail):
def __init__(mrx, id, name, age):
super().__init__(id, name, age)
mrx.cgpa = 3.67
x = Records("20499 ", "Harry Maguire ", 19)
x.print_detail()
print(x.cgpa)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Crie uma propriedade chamada course_name na classe Courses :

Python Inheritance Add Property Example: 2 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Student_detail:
def __init__(mrx, id, name, age):
mrx.s_id = id
mrx.s_name = name
mrx.s_age = age
def print_detail(mrx):
print(mrx.s_id, mrx.s_name, mrx.s_age)
class Courses(Student_detail):
def __init__(mrx, id, name, age):
super().__init__(id, name, age)
mrx.course_name = "Object Oriented Programming"
x = Courses("20499 ", "Harry Maguire ", 19)
x.print_detail()
print(x.course_name)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Ao criar objetos de registros, o cgpa 3.67 e course_name é uma variável de Programação Orientada a Objetos incluída nas classes Registros e Cursos, respectivamente.

Você pode fazer isso adicionando outro parâmetro ao método init() .

Ao criar objetos, forneça um parâmetro cgpa e passe o cgpa apropriado :

Python Inheritance Add Property Example: 3 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Student_detail:
def __init__(mrx, id, name, age):
mrx.s_id = id
mrx.s_name = name
mrx.s_age = age
def print_detail(mrx):
print(mrx.s_id, mrx.s_name, mrx.s_age)
class Records(Student_detail):
def __init__(mrx, id, name, age,cgpa):
super().__init__(id, name, age)
mrx.cgpa_num = cgpa
x = Records("20499 ", "Harry Maguire ", 19, 3.67)
x.print_detail()
print(x.cgpa_num)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Ao criar objetos, forneça um parâmetro de curso e passe no curso apropriado:

Python Inheritance Add Property Example: 4 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Student_detail:
def __init__(mrx, id, name, age):
mrx.s_id = id
mrx.s_name = name
mrx.s_age = age
def print_detail(mrx):
print(mrx.s_id, mrx.s_name, mrx.s_age)
class Courses(Student_detail):
def __init__(mrx, id, name, age, course):
super().__init__(id, name, age)
mrx.course_name = course
x = Courses("20499 ", "Harry Maguire ", 19, "Object Oriented Programming")
x.print_detail()
print(x.course_name)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Adicionar métodos

Inclua uma função chamada total_marks na classe Records :

Add Method Example: 1 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Student_detail:
def __init__(mrx, id, name, age):
mrx.s_id = id
mrx.s_name = name
mrx.s_age = age
def print_detail(mrx):
print(mrx.s_id, mrx.s_name, mrx.s_age)
class Records(Student_detail):
def __init__(mrx, id, name, age,cgpa):
super().__init__(id, name, age)
mrx.cgpa_num = cgpa
def total_marks(mrx, marks):
print(f"Total Marks of {mrx.s_id}-{mrx.s_name}-{mrx.s_age} is {marks} and CGPA is {mrx.cgpa_num}")
x = Records("20499", "Harry Maguire", 19, 3.67)
x.total_marks(95)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Inclua uma função chamada course_marks na classe Courses :

Add Method Example: 2 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Student_detail:
def __init__(mrx, id, name, age):
mrx.s_id = id
mrx.s_name = name
mrx.s_age = age
def print_detail(mrx):
print(mrx.s_id, mrx.s_name, mrx.s_age)
class Courses(Student_detail):
def __init__(mrx, id, name, age, course):
super().__init__(id, name, age)
mrx.course_name = course
def course_marks(mrx, marks):
print(f"{mrx.s_id}-{mrx.s_name}-{mrx.s_age} your marks in {mrx.course_name} is {marks}, Out of 1000")
x = Courses("20499 ", "Harry Maguire ", 19, "Object Oriented Programming")
x.course_marks(786)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Exemplos de herança do Python

Na classe filha, você pode substituir a herança do método pai se o método na classe filha tiver o mesmo nome da função na classe pai.


Benefícios da Herança do Python

  1. A reutilização de código é possível porque uma classe filha herda todas as funcionalidades de sua classe pai.

  2. A funcionalidade pode ser herdada depois de desenvolvida. A roda não precisa ser reinventada. Como resultado, o código é mais limpo e fácil de manter.

  3. Você pode até mesmo definir suas próprias funcionalidades para a classe filha, de modo que apenas funções essenciais serão herdadas e outras funções necessárias serão definidas.

 Agradecemos sua reação e encorajamos você a deixar seus pensamentos abaixo para nos ajudar a melhorar este site.
Nós valorizamos o seu feedback.
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0

Assine a nossa newsletter
Digite seu e-mail para receber um resumo semanal de nossos melhores posts. Saber mais!
ícone