Seguint amb programació orientada a objectes en Python (OOP) veurem Herència simple i múltiple.
Quan parlem de classes hi ha un avantatge molt destacable que és la possibilitat que un objecte pertanyent a una classe sigui capaç d’heretar els atributs i mètodes de una altra.
Herència simple vs Herència Múltiple
Índex de l’contingut
Herència simple
L’herència simple té lloc quan una classe filla hereta els atributs i mètodes d’una única classe pare. Anem a procedir a crear dues classes, una principal i una secundària, en aquesta última anem a afegir la funció de presentar-accedint als atributs de la classe pare.
#!/usr/bin/env python# -*- coding: utf-8 -*-#class Estudiante(object): #Creamos la clase padre def __init__(self, edad, nombre): # Definimos los parámetros edad y nombre self.edad = edad #Declaramos que el atributo edad es igual al argumento edad self.nombre = nombre #Declaramos que el atributo nombre es igual al argumento nombreclass Derecho (Estudiante): #Entre paréntesis indicamos la clase padre o principal ESTUDIANTE #Lo que la convierte a DERECHO en una clase hija o secundaria def presentarse(self): #Creamos el método presentarse print (f"Soy {self.nombre} tengo {self.edad} años y estudio Derecho") #Se presenta llamando los atributosManuel = Derecho(26, 'Manuel Contreras') #Indicamos argumentos edad y nombreManuel.presentarse() # Llamamos al método y Manuel se presenta
Resultat:
Sóc Manuel Contreras tinc 26 anys i estudi Dret
Com veus assignem a l’objecte “Manuel” la classe “Dret” que hereta els atributs de “Estudiant”. de el contrari obtindrem un error perquè els atributs nom i edat pertanyen a Estudiant.
Recorda que per declarar una classe ho fem utilitzant el constructor __init__ i entre parèntesis els paràmetres als quals els donarem arguments a l’hora d’assignar- la classe a algun objecte.
Class Nombredelaclase (object):
def constructor_init (self, paràmetres):
Declaració
I si volem que la nostra classe hereti els atributs o mètodes d’una altra classe principal (conté el constructor __init __)
Class Nombredelaclase (clasepadre):
Declaracions
Quan vam crear una classe filla no cal tornar a incloure el constructor __init__ si la classe pare o principal ja el conté.
classe base o pare
Perquè sigui possible l’herència d’atributs i mètodes d’una classe, ha d’existir la superclasse o classe principal de la qual la classe filla o secundària va a heretar. És a dir, perquè hi hagi un fill deu existir un pare.
Suposem que nosaltres hem heretat algunes virtuts i defectes dels nostres pares. Ells serien les nostres classes primàries, o base. I nosaltres seríem la secundària o filla.
Herència Múltiple
Els casos d’herència múltiple en Python es donen quan una classe secundària o filla hereta atributs i mètodes de mes d’una classe principal o pare. Només cal separar amb una coma les dues principals a l’hora de crear la classe secundària:
Class Nombredelaclase (clasepadre1, clasepadre2):
Declaracions
Aquesta classe filla haurà d’heretar atributs i mètodes d’ambdues classes (clasepadre1 i clasepadre2).
Vegem un exemple de herència múltiple amb el mateix codi anterior però creant ara una classe corresponent a l’institut.
#!/usr/bin/env python# -*- coding: utf-8 -*-#class Estudiante(object): #Creamos la clase padre def __init__(self, edad, nombre): # Definimos los parámetros edad y nombre self.edad = edad #Declaramos que el atributo edad es igual al argumento edad self.nombre = nombre #Declaramos que el atributo nombre es igual al argumento nombreclass Instituto(object): def presentarinstituto (self): print("""Estudio en el Instituto de Leyes 112""")class Derecho (Estudiante, Instituto): #Entre paréntesis indicamos la clase padre o principal ESTUDIANTE #Lo que la convierte a DERECHO en una clase hija o secundaria def presentarse(self): #Creamos el método presentarse print (f"Soy {self.nombre} tengo {self.edad} años y estudio Derecho") #Se presenta llamando los atributos Manuel = Derecho(26, 'Manuel Contreras') #Indicamos argumentos edad y nombreManuel.presentarse() # Llamamos al método y Manuel se presentaManuel.presentarinstituto()
Resultat:
Sóc Manuel Contreras tinc 26 anys i estudi Dret estudi a l’Institut de Lleis 112
Com podem veure la classe Dret ara hereta de la classe principal Estudiant i Institut. Per això encara que l’objecte “Manuel” pertanyi a la classe Dret, se’ns permet utilitzar el mètode “Manuel.presentarinstituto ()” que correspon a la classe Institut.
Avantatges
Una de les principals avantatges és la reutilització de codi permetent establir una relació entre classes evitant que sigui necessari tornar a declarar certs mètodes o atributs.
les classes ens permeten construir objectes sobre una col·lecció d’atributs i mètodes definits de forma abstracta. I la capacitat d’herència ens permetrà crear classes secundàries més grans i capaços heretant múltiples atributs i mètodes d’altres així com també més específiques controlant els mateixos per a una única classe particular.