3. Declaración de operaciones y herencia¶
Agregue el método
estado_de_cuenta
a la claseCuenta
el cual imprime una lista de las operaciones de retiro y depósito realizadas.Cambie el método
__init__
para usar el métododepositar
para inicializar el saldo.
3.1. Clase Cliente y Clase Cuenta (Mejorada)¶
class Cliente:
def __init__(self, nombre, telefono):
self.nombre = nombre
self.telefono = telefono
class Cuenta:
def __init__(self, clientes, numero, saldo=0):
self.saldo = 0
self.clientes = clientes
self.numero = numero
self.operaciones = []
self.depositar(saldo)
def resumen(self):
print("CC numero: %s saldo: %10.2f" % (self.numero, self.saldo))
def retirar(self, monto):
if self.saldo >= monto:
self.saldo -= monto
self.operaciones.append(["Retiro", monto])
else:
print("Saldo insuficiente para retirar")
Activity: 3.1.1 ActiveCode (ac_l25_3a)
3.1.1. Utilizando las clases Cliente y Cuenta (Mejorada)¶
juan = Cliente("Juan de Silva", "777-1234")
maria = Cliente("Maria de Silva", "555-4321")
cuenta_1 = Cuenta([juan], 1, 1000)
cuenta_2 = Cuenta([maria, juan], 2, 500)
cuenta_1.retirar(50)
cuenta_2.depositar(300)
cuenta_1.retirar(190)
cuenta_2.depositar(95.15)
cuenta_2.retirar(250)
cuenta_1.estado_de_cuenta()
cuenta_2.estado_de_cuenta()
Activity: 3.1.1.1 ActiveCode (ac_l25_3b)
3.2. Herencia¶
La herencia en objetos permite modificar nuestras clases, agregando o modificando atributos y métodos, basados en la clase anterior.
Vamos a crear cuentas especiales, donde podemos retirar más dinero que el saldo, hasta cierto límite.
Las operaciones de depósito, retiro y resumen continúan como una cuenta normal.
3.3. Clase Cuenta Especial¶
class CuentaEspecial(Cuenta):
def __init__(self, clientes, numero, saldo=0, limite=0):
Cuenta.__init__(self, clientes, numero, saldo)
self.limite = limite
def retirar(self, monto):
if self.saldo + self.limite >= monto:
self.saldo -= monto
self.operaciones.append(["Retiro", monto])
else:
print("Saldo insuficiente para retirar")
Activity: 3.3.1 ActiveCode (ac_l25_3c)
Tenga en cuenta que escribimos
Cuenta
entre paréntesis.CuentaEspecial
hereda los métodos y atributos deCuenta
.self.limite
se creará solo para clases de tipoCuentaEspecial
.Tenga en cuenta que estamos sobre escribiendo completamente el método
retirar
enCuentaEspecial
.
3.4. Ventajas de la herencia¶
Hemos modificado muy poco nuestro programa, manteniendo la funcionalidad anterior y agregando nuevas características.
Fue posible reutilizar los métodos de la cuenta.
Por lo tanto, la definición de la clase
CuentaEspecial
fue mucho más simple, incluyendo solo el comportamiento diferente.
3.5. Utilizando todas las clases¶
juan = Cliente("Juan de Silva", "777-1234")
maria = Cliente("Maria de Silva", "555-4321")
cuenta_1 = Cuenta([juan], 1, 1000)
cuenta_2 = CuentaEspecial([maria, juan], 2, 500, 1000)
cuenta_1.retirar(50)
cuenta_2.depositar(300)
cuenta_1.retirar(190)
cuenta_2.depositar(95.15)
cuenta_2.retirar(1500)
cuenta_1.estado_de_cuenta()
cuenta_2.estado_de_cuenta()
Activity: 3.5.1 ActiveCode (ac_l25_3d)