class Usuario:
"""Representa un usuario del sistema"""
def __init__(self):
self.nombre = "Ana"
self.edad = 25
self.genero = "femenino"
def __str__(self):
return f"Usuario: {self.nombre}"
def saludar(self):
print("Enviando saludo...")
Creación de Instancias
Atributos Privados
class CuentaBancaria:
def __init__(self, titular):
self.__titular = titular
def __str__(self):
return f"Titular: {self.__titular}"
def cambiar_titular(self, nuevo_titular):
self.__titular = nuevo_titular
def obtener_titular(self):
return self.__titular
Los atributos con doble guión bajo (__titular) son privadso y no accesibles directamente.
Métodos Privados
__nombre_metodo()
Método __del__
class Recurso:
def __init__(self, id):
self.__id = id
def __del__(self):
print(f"Liberando recurso {self.__id}")
# Uso
res1 = Recurso("A001")
res2 = res1
del res1 # No libera el objeto
del res2 # Libera el objeto
El destructor se ejecuta cuando el contador de referencias llega a cero o al finalizar el programa.
Herencia
class Vehiculo:
def mover(self):
print("Desplazándose...")
class Coche(Vehiculo):
def acelerar(self):
print("Acelerando motor...")
class Moto(Vehiculo):
def hacer_caballito(self):
print("Realizando maniobra...")
# Herencia multinivel
class CocheDeportivo(Coche):
def turbo(self):
print("Activando turbo...")
super().acelerar()
Constructores en Herencia
class Estudiante(Persona):
def __init__(self, curso, nombre, edad):
super().__init__(nombre, edad)
self.curso = curso
Herencia Múltiple
class InterfazA:
def operar(self):
print("Operación A")
class InterfazB:
def operar(self):
print("Operación B")
class Sistema(InterfazB, InterfazA):
pass
# Orden de resolución
print(Sistema.__mro__)
En conflictos de nombres, prevalece el método de la primera clase padre.
Manejo de Contextos
class ConexionBD:
def __enter__(self):
print("Estableciendo conexión...")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
if exc_tb:
print("Error en contexto")
else:
print("Conexión exitosa")
print("Cerrando conexión")
return True
def consultar(self):
print("Ejecutando consulta...")
with ConexionBD() as conn:
conn.consultar()