super()
¶class Empleado: # clase Padre
def __init__(self, nombre, edad, sueldo):
self.nombre = nombre
self.edad = edad
self.sueldo = sueldo
class Tripulante(Empleado): # Tripulante no tiene método constructor propio, hereda el de Empleado
def getRenovacionLicencia(self):
if self.edad < 50:
print("Renueva su licencia cada año")
else:
print("Renueva su licencia cada seis meses")
r = Tripulante("Raquel", 49, 60000)
r.edad
49
r.getRenovacionLicencia()
r.edad += 1
r.getRenovacionLicencia()
Renueva su licencia cada año Renueva su licencia cada seis meses
Tenemos la superclase Empleado y la subclase AgenteVentas.
Para la clase hija AgenteVentas tenemos varias formas de conseguir establecer los atributos:
class Empleado: # clase Padre
def __init__(self, nombre, edad, sueldo): # definimos los Atributos
self.nombre = nombre
self.edad = edad
self.sueldo = sueldo
def calcularSueldo(self, descuentos, bonos): # añadimos un método para calcular el sueldo neto
return self.sueldo - descuentos + bonos
class AgenteVentas(Empleado): # tiene método constructor propio, tiene un argumento propio
def __init_(self, nombre, edad, sueldo, mostrador):# creamos el constructor de la clase especificando atributos
self.nombre = nombre # sobrescribe este atributo de la superclase
self.edad = edad # sobrescribe este atributo de la superclase
self.sueldo = sueldo # sobrescribe este atributo de la superclase
self.mostrador = mostrador # este atributo es nuevo
Las líneas 11, 12 y 13 del código anterior llevan un comentario que indica que esa línea "sobrescribe este atributo de la superclase". Imaginemos que en lugar de ser tres atributos los que se sobrecriben fueran decenas o cientos, estaríamos repitiendo código y esto siempre procuramos evitarlo.
El método 2 permite evitar estas tres líneas poniendo una sola.
La superclase en este caso se llama Empleado y este será el nombre que utilizaremos, aunque podríamos poner cualquier otra palabra.
class Empleado:
def __init__(self, nombre, edad, sueldo):
self.nombre = nombre
self.edad = edad
self.sueldo = sueldo
def calcularSueldo(self, descuentos, bonos):
return self.sueldo - descuentos + bonos
class AgenteVentas(Empleado):
def __init__(self, nombre, edad, sueldo, mostrador):
Empleado.__init__(self, nombre, edad, sueldo) # con esta línea evitamos la sobrescritura de atributos
self.mostrador = mostrador
v = AgenteVentas("Victor", 42, 32000, 2)
class Empleado:
def __init__(self, nombre, edad, sueldo):
self.nombre = nombre
self.edad = edad
self.sueldo = sueldo
class AgenteVentas(Empleado):
def __init__(self, nombre, edad, sueldo, mostrador):
super().__init__(nombre, edad, sueldo) # línea recomendada que evita sobrescribir atributos
self.mostrador = mostrador
t = AgenteVentas("Teodoro", 21, 30000, 5)
Observe la diferencia entre las dos líneas de código:
Empleado.__init__(self, nombre, edad, sueldo)
super().__init__(nombre, edad, sueldo)
class Empleado:
def __init__(self, nombre, edad, sueldo):
self.nombre = nombre
self.edad = edad
self.sueldo = sueldo
def calcularSueldo(self, descuentos, bonos): # añadimos un método para calcular el salario neto
return self.sueldo - descuentos + bonos
class Tripulante(Empleado):
def getRenovacionLicencia(self):
if self.edad < 50:
print("Renueva su licencia cada año")
else:
print("Renueva su licencia cada seis meses")
class AgenteVentas(Empleado):
def __init__(self, nombre, edad, sueldo, mostrador):
super().__init__(nombre, edad, sueldo)
self.mostrador = mostrador
teo = AgenteVentas("Teodoro", 21, 30000, 5)
teo.calcularSueldo(500, 3000) # el AgenteVentas tb heredó el método calcularSueldo
32500
r = Tripulante("Raquel", 52, 60000)
r.calcularSueldo(800, 5000)
64200