Herança Python
Herança Python
A herança nos permite definir uma classe que recebe todas as funcionalidades de uma classe pai e nos permite adicionar mais. Neste tutorial, você aprenderá a usar herança em Python.
Vídeo:herança do Python
Herança em Python
A herança é um recurso poderoso na programação orientada a objetos.
Refere-se à definição de uma nova classe com pouca ou nenhuma modificação em uma classe existente. A nova classe é chamada de classe derivada (ou filha) e aquele do qual ele herda é chamado de classe base (ou pai) .
Sintaxe de herança do Python
class BaseClass: Body of base class class DerivedClass(BaseClass): Body of derived class
A classe derivada herda os recursos da classe base, onde novos recursos podem ser adicionados a ela. Isso resulta na reutilização do código.
Exemplo de herança em Python
Para demonstrar o uso da herança, tomemos um exemplo.
Um polígono é uma figura fechada com 3 ou mais lados. Digamos, temos uma classe chamada
Polygon definido a seguir.
class Polygon:
def __init__(self, no_of_sides):
self.n = no_of_sides
self.sides = [0 for i in range(no_of_sides)]
def inputSides(self):
self.sides = [float(input("Enter side "+str(i+1)+" : ")) for i in range(self.n)]
def dispSides(self):
for i in range(self.n):
print("Side",i+1,"is",self.sides[i]) Esta classe possui atributos de dados para armazenar o número de lados n e magnitude de cada lado como uma lista chamada lados .
O
inputSides() O método recebe a magnitude de cada lado e dispSides() exibe esses comprimentos laterais. Um triângulo é um polígono com 3 lados. Então, podemos criar uma classe chamada Triangle que herda de Polygon . Isso faz com que todos os atributos de Polygon classe disponível para o Triângulo classe.
Não precisamos defini-los novamente (reutilização de código). Triângulo pode ser definido da seguinte forma.
class Triangle(Polygon):
def __init__(self):
Polygon.__init__(self,3)
def findArea(self):
a, b, c = self.sides
# calculate the semi-perimeter
s = (a + b + c) / 2
area = (s*(s-a)*(s-b)*(s-c)) ** 0.5
print('The area of the triangle is %0.2f' %area) No entanto, a classe
Triangle tem um novo método findArea() para encontrar e imprimir a área do triângulo. Aqui está um exemplo de execução.
>>> t = Triangle()
>>> t.inputSides()
Enter side 1 : 3
Enter side 2 : 5
Enter side 3 : 4
>>> t.dispSides()
Side 1 is 3.0
Side 2 is 5.0
Side 3 is 4.0
>>> t.findArea()
The area of the triangle is 6.00 Podemos ver que, embora não tenhamos definido métodos como
inputSides() ou dispSides() para a classe Triangle separadamente, pudemos usá-los. Se um atributo não for encontrado na própria classe, a pesquisa continua na classe base. Isso se repete recursivamente, se a própria classe base for derivada de outras classes.
Substituição de método em Python
No exemplo acima, observe que
__init__() foi definido em ambas as classes, Triangle também Polígono . Quando isso acontece, o método na classe derivada substitui o da classe base. Isto é, __init__() em Triângulo tem preferência sobre o __init__ em Polígono . Geralmente, ao substituir um método base, tendemos a estender a definição em vez de simplesmente substituí-la. O mesmo está sendo feito chamando o método na classe base de um na classe derivada (chamando
Polygon.__init__() de __init__() em Triangle ). Uma opção melhor seria usar a função interna
super() . Então, super().__init__(3) é equivalente a Polygon.__init__(self,3) e é preferido. Para saber mais sobre o super() função em Python, visite a função Python super(). Duas funções integradas
isinstance() e issubclass() são usados para verificar heranças. A função
isinstance() retorna True se o objeto for uma instância da classe ou outras classes derivadas dela. Toda e qualquer classe em Python herda da classe base object .
>>> isinstance(t,Triangle)
True
>>> isinstance(t,Polygon)
True
>>> isinstance(t,int)
False
>>> isinstance(t,object)
True Da mesma forma,
issubclass() é usado para verificar a herança de classe.
>>> issubclass(Polygon,Triangle)
False
>>> issubclass(Triangle,Polygon)
True
>>> issubclass(bool,int)
True python