Ejercicios Python - Nivel Intermedio (POO) - Parte 3
Ejercicio 16
Crea una clase Contador que actúe como un iterador para contar hasta un número dado.
Solución
class Contador:
def __init__(self, limite):
self.limite = limite
self.contador = 0
def __iter__(self):
return self
def __next__(self):
if self.contador < self.limite:
self.contador += 1
return self.contador
else:
raise StopIteration
Ejemplo de uso
= Contador(3)
contador for numero in contador:
print(numero) # 1 2 3
Ejercicio 17
Crea una clase LoggerMixin para agregar registro de actividades a otras clases.
Solución
class LoggerMixin:
def log(self, mensaje):
print(f"Log: {mensaje}")
class Usuario(LoggerMixin):
def init(self, nombre):
self.nombre = nombre
def realizar_actividad(self):
self.log(f"{self.nombre} realizó una actividad")
Ejemplo de uso
= Usuario("Carlos")
usuario # Log: Carlos realizó una actividad usuario.realizar_actividad()
Ejercicio 18
Crea una clase Conversor que permita convertir entre unidades (por ejemplo, kilómetros a millas).
Solución
class Conversor:
@staticmethod
def kilometros_a_millas(km):
return km * 0.621371
@classmethod
def millas_a_kilometros(cls, millas):
return millas / 0.621371
Ejemplo de uso
print(Conversor.kilometros_a_millas(5)) # 3.106855
print(Conversor.millas_a_kilometros(3)) # 4.828032
Ejercicio 19
Crea una jerarquía de clases: Vehiculo como base, con subclases Auto y Moto.
Solución
class Vehiculo:
def __init__(self, marca):
self.marca = marca
class Auto(Vehiculo):
def __init__(self, marca, puertas):
super().__init__(marca)
self.puertas = puertas
class Moto(Vehiculo):
def __init__(self, marca, cilindrada):
super().init(marca)
self.cilindrada = cilindrada
Ejemplo de uso
= Auto("Toyota", 4)
auto = Moto("Yamaha", 250)
moto print(auto.marca) # Toyota
print(moto.cilindrada) # 250
Ejercicio 20
Crea una clase Punto cuyos atributos sean de solo lectura.
Solución
class Punto:
def __init__(self, x, y):
self._x = x self._y = y
@property
def x(self):
return self._x
@property
def y(self):
return self._y
Ejemplo de uso
= Punto(5, 10)
punto print(punto.x) # 5
print(punto.y) # 10
= 10 # AttributeError: can't set AttributeError punto.x
Ejercicio 21
Implementa la clase Fraccion que permita comparar fracciones usando operadores (<, >, ==).
Solución
class Fraccion:
def __init__(self, numerador, denominador):
self.numerador = numerador
self.denominador = denominador
def __eq__(self, otra):
return self.numerador * otra.denominador == self.denominador * otra.numerador
def __lt__(self, otra):
return self.numerador * otra.denominador < self.denominador * otra.numerador
Ejemplo de uso
= Fraccion(1, 2)
f1 = Fraccion(1, 3)
f2 print(f1 == f2) # False
print(f1 < f2) # False
Ejercicio 22
Crea una clase Calculadora que permita llamar a sus instancias como si fueran funciones.
Solución
class Calculadora:
def __call__(self, a, b):
return a + b
Ejemplo de uso
= Calculadora()
calculadora print(calculadora(2, 3)) # 5