diff --git a/python-ofensivo/00_ejercicios/04_ejemplo_clase.py b/python-ofensivo/00_ejercicios/04_ejemplo_clase1.py similarity index 100% rename from python-ofensivo/00_ejercicios/04_ejemplo_clase.py rename to python-ofensivo/00_ejercicios/04_ejemplo_clase1.py diff --git a/python-ofensivo/00_ejercicios/04_ejemplo_clase3.py b/python-ofensivo/00_ejercicios/04_ejemplo_clase3.py new file mode 100644 index 0000000..53741dd --- /dev/null +++ b/python-ofensivo/00_ejercicios/04_ejemplo_clase3.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 +""" +Ejemplo de clases y objetos en Python +""" + +class rectangulo: + + def __init__(self, base, altura): + + self.base = base + + self.altura = altura + + @property + def area(self): + + return self.base * self.altura + +# Propiedad especiales de la clase + def __str__(self): + + return f"\n[+]Propiedades del rectangulo:\n\t[+] Base: {self.base}\n\t[+] Altura: {self.altura}\n" + + def __eq__(self, otro): + + return self.base == otro.base and self.altura == otro.altura + + +rect1 = rectangulo(3, 4) +rect2 = rectangulo(3, 4) + +print(rect1) +print(f"[+] El area del rectangulo es: {rect1.area}\n") +print(f"[+] ¿Son iguales rect1 y rect2? --> {rect1 == rect2}\n") diff --git a/python-ofensivo/00_ejercicios/04_ejemplo_clase4.py b/python-ofensivo/00_ejercicios/04_ejemplo_clase4.py new file mode 100644 index 0000000..41f8c27 --- /dev/null +++ b/python-ofensivo/00_ejercicios/04_ejemplo_clase4.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +""" +Ejemplo de clases y objetos en Python +""" + + +class Libro: + + bestseller_value = 5000 # Variable de clase + IVA = 0.21 # Variable de clase + + def __init__(self, titulo, autor, precio, ventas=7000): + self.titulo = titulo + self.autor = autor + self.precio = precio + self.ventas = ventas + + def __str__(self): + return "\n[*] {} escrito por {} tiene un precio de {} euros y se ha vendido {} veces.\n".format( + self.titulo, + self.autor, + self.precio, + self.ventas + ) + + @staticmethod # Decorador + def es_best_seller(ventas): + if ventas > Libro.bestseller_value: # Las variables de clase se llaman con el nombre de la clase + return f"[*] Lo ha petado.\n" + else: + return f"[*] No lo ha petado.\n" + + @classmethod # Decorador + def precio_con_iva(cls, precio): + + precio_con_iva = precio * (1 + cls.IVA) # Las variables se llama con el nombre de la clase + + return round(precio_con_iva, 2) + + +class LibroDigital(Libro): + + IVA = 0.10 + + +# Instancia +mi_libro = Libro("El Quijote", "Miguel de Cervantes", 18.7) +mi_libro_digital = LibroDigital("El Quijote", "Miguel de Cervantes", 18.7) + +print( + mi_libro +) + +# Con el decorador no tienes por qué instanciar el objeto, puedes hacerlo a la clase. +print( + Libro.es_best_seller(mi_libro.ventas) +) + +print( + f"[*] El precio con IVA es de {Libro.precio_con_iva(mi_libro.precio)} euros.\n" +) + +print( + f"[*] El precio con IVA del libro digital es de {LibroDigital.precio_con_iva(mi_libro_digital.precio)} euros.\n" +)