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