Clase 31. Python 7
Clase 31. Python 7
Clase 31
PYTHON 7
Herencia y polimorfismo
Les damos la bienvenida
Vamos a comenzar a grabar la clase
Clase 30 Clase 31 Clase 32
Dado que los alumnos comparten buena parte de sus atributos y métodos
con otras personas (alumnos de otras instituciones, docentes, etcétera) sería
útil contar con una superclase llamada Persona que contenga los atributos y
métodos comunes a todas las personas, y que la subclase AlumnosCodo
herede de ella esos elementos, y sume los que la superclase no tenga. Por
ejemplo, podría tener un atributo que indique en qué curso se encuentra
matriculado, o una lista con los trabajos prácticos que ha realizado.
Herencia simple | Superclase
La definición de la superclase Persona no posee ninguna característica
particular. Se define como una clase más:
Superclase Persona
class Persona: # Clase que representa una persona.
def __init__(self, identificacion, nombre, apellido, dni):
#Constructor de Persona
self.id = identificacion # Atributo de instancia
self.nombre = nombre # Atributo de instancia
self.apellido = apellido # Atributo de instancia
self.dni = dni # Atributo de instancia
# Método str:
def __str__(self):
return f"{self.id} - DNI - {self.dni} {self.apellido}, {self.nombre}"
Herencia simple | Superclase
Esta clase Persona, que será la superclase de nuestro ejemplo, posee varios
atributos de instancia y un método. A pesar de que la utilizaremos como
superclase, aún es posible instanciar objetos Persona:
La herencia múltiple ocurre cuando una subclase deriva de dos o más clases
base. Al escribir el código de la subclase, las superclases de las que heredará
métodos y atributos se indican de la misma forma, separando cada una con
una coma.
Por ejemplo, una subclase Hijo podría heredar de dos superclases: Padre y
Madre.
Herencia múltiple
Herencia múltiple
Vemos como el objeto hijo1 ha class Padre: # Superclase 1
heredado los métodos de las def llevar(self):
print("Papá me lleva al colegio.")
superclases Padre y Madre.
class Madre: # Superclase 2
Podemos utilizar hijo1 los métodos def programar(self):
print("Mamá programa en Python.")
propios o los de las superclases. En
caso de que ambas superclases class Hijo(Padre, Madre): # Subclase
def amar(self):
tengan un método con el mismo print("Quiero a mis padres")
nombre, se hereda el que se escriba hijo1 = Hijo() # Instanciamos hijo1
primero en la declaración (Padre en hijo1.llevar() # Papá me lleva al colegio.
hijo1.programar()# Mamá programa en Python.
el ejemplo): hijo1.amar() # Quiero a mis padres
Clases abstractas
Un concepto importante en Programación Orientada a Objetos es el
de las clases abstractas. Son clases en las que se pueden definir tanto
métodos como propiedades, pero que no pueden ser instanciadas
directamente. Solamente se pueden usar para construir subclases
(como si fueran moldes), permitiendo tener una única implementación
de los métodos compartidos. Esto evita la duplicación de código.
Las clases abstractas definen una interfaz común para las subclases.
Proporcionan atributos y métodos comunes para todas las subclases
evitando así la necesidad de duplicar código, imponiendo además los
métodos que deben ser implementados para evitar inconsistencias
entre las subclases.
Clases abstractas
Propiedades de las clases abstractas:
● No pueden ser instanciadas, simplemente proporcionan una interfaz
para las subclases derivadas evitando así la duplicación de código.
● No es obligatorio que tengan una implementación de todos los métodos
necesarios. Pudiendo ser estos abstractos. Los métodos abstractos son
aquellos que solamente tienen una declaración, pero no una
implementación detallada de las funcionalidades.
● Las clases derivadas de las clases abstractas deben implementar
necesariamente todos los métodos abstractos para poder crear una clase
que se ajuste a la interfaz definida. En el caso de que no se defina alguno
de los métodos no se podrá crear la clase.
Clases abstractas | Creación
Para poder crear clases abstractas en Python es necesario importar la clase
ABC y el decorador abstractmethod del módulo abc (Abstract Base
Classes).
Clase abstracta
Si se intenta crear una instancia de la
from abc import ABC, abstractmethod
clase Animal, Python no lo permite.
class Animal(ABC):
@abstractmethod Si la clase no hereda de ABC o
def mover(self):
pass # permite “pasar” sin contenido contiene por lo menos un método
perro = Animal()
#TypeError: Can't instantiate abstract class abstracto, Python permitirá crear
Animal with abstract method mover instancias de la clase.
Clases abstractas
Las subclases tienen que implementar todos los métodos abstractos
definidos en la clase abstracta, o Python no permitirá instanciar la clase hija.
class Perro:
def hablar(self):
print("!Guau! "*3)
class Cerdo:
def hablar(self):
print("!Oink! "*3)
Polimorfismo | Ejemplo
Programa principal
El programa principal define una
def hacer_hablar(x):
x.hablar() función que recibe un objeto, y utiliza
#Creamos un pato y lo hacemos "hablar:"
(sin importar cual sea) su método
mi_pato = Pato() hablar().
hacer_hablar(mi_pato)
● Público (+)
● Privado (-)
● Protegido (#)