class Persona(): # superclase
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad
def identificar(self):
print(f"Soy {self.nombre} y tengo {self.edad} años.")
class Empleado(Persona): # subclase
def __init__(self, nombre, edad, categoria, salario):
Persona.__init__(self, nombre, edad) # equivale a: super().__init__(nombre, edad)
self.categoria = categoria
self.salario = salario
def datos_nomina(self):
msg=f"Mi categoría es de {self.categoria} y tengo un salario de {self.salario} €."
return msg
p1 = Persona("Pedro", 25)
p2 = Empleado("Ana", 27, "administrativo", 28500)
p2.identificar()
print(p2.datos_nomina())
Soy Ana y tengo 27 años. Mi categoría es de administrativo y tengo un salario de 28500 €.
Podemos definir la superclase Persona de tres formas diferentes que son análogas:
Supongamos un Estudiante genérico que es la clase padre y un estudiante de actuariales (Actuario) que es la clase hija.
En este ejemplo la clase hija Actuario no lleva constructor y utiliza el constructor de la clase padre.
Cuando creamos una clase hija no es necesario volver a incluir el constructor __init__ si nos basta con el que contiene la clase padre.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Estudiante(object): # Creamos la clase padre. Observe que poner object es optativo.
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 nombre
class Actuario(Estudiante): # La clase padre es ESTUDIANTE, esto convierte a ACTUARIO en clase hija
def saluda(self): # Creamos el método saludar
print (f"Soy {self.nombre} tengo {self.edad} años y estudio actuariales.") # Se presenta llamando a los atributos
Manu = Actuario(23, 'José Manuel') # Indicamos argumentos edad y nombre
Manu.saluda() # Llamamos al método y Manu se presenta
Soy José Manuel tengo 23 años y estudio actuariales.
Sabemos que Estudiante y Universidad son superclases porque no heredan de nadie.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Estudiante(object): # una superclase
def __init__(self, edad, nombre):
self.edad = edad
self.nombre = nombre
class Universidad(object): # creamos otra superclase. Observe que poner object es optativo.
def presentaUni(self): # creamos el método que permite presentar la universidad en la que estudia
print("Estudio en la UCM.")
class Actuario(Estudiante,Universidad): # hereda de dos superclases
def saluda(self): # creamos el método saludar
print (f"Soy {self.nombre} tengo {self.edad} años y estudio actuariales.")
Manu = Actuario(23, 'José Manuel') # instanciamos el objeto Manu
Manu.saluda() # llamamos al método y Manu se presenta
Manu.presentaUni() # llamamos al método presentaUni y Manu nos dice en que universidad estudia
Soy José Manuel tengo 23 años y estudio actuariales. Estudio en la UCM.
Tenemos dos superclases Persona, Actuario y una subclase que hereda de ambas llamada Empleado.
class Persona: # superclase
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad
class Actuario: # superclase
def __init__(self, universidad, promocion): # ejemplo: universidad=UCM promocion=2020
self.uni=universidad # el atributo de instancia es self.uni
self.promocion=promocion
class Empleado(Persona, Actuario): # el orden importa, si hay 2 atributos con igual nombre se toma el de la 1ª clase
def __init__(self,nombre,edad,uni,promocion,categoria,salario):
Persona.__init__(self, nombre, edad)
Actuario.__init__(self,uni,promocion)
self.categoria=categoria
self.salario=salario
e1 = Empleado("Eva", 26, "UCM", 2016, "senior", 44600)
print("Nombre:", e1.nombre)
print("Edad:", e1.edad)
print("Universidad:", e1.uni)
print("Promoción:", e1.promocion)
print("Categoría:", e1.categoria)
print("Salario:", e1.salario)
Nombre: Eva Edad: 26 Universidad: UCM Promoción: 2016 Categoría: senior Salario: 44600