Volver
Ctrl+Space
◑
Copiar
Descargar
Restaurar
Ejecutar
Ctrl+Enter
# POO en Python - Ejemplo 2: Atributos y métodos # ================================================= class Producto: _total_productos = 0 # atributo de clase — compartido def __init__(self, nombre, precio, stock=0): self.nombre = nombre self._precio = precio # "privado" por convención self._stock = stock Producto._total_productos += 1 # --- Getters con @property --- @property def precio(self): return self._precio @property def stock(self): return self._stock # --- Setter con @precio.setter --- @precio.setter def precio(self, nuevo): if nuevo < 0: raise ValueError("El precio no puede ser negativo") self._precio = nuevo # --- Métodos de negocio --- def agregar_stock(self, cantidad): if cantidad <= 0: raise ValueError("La cantidad debe ser positiva") self._stock += cantidad print(f" Stock de {self.nombre}: +{cantidad} → {self._stock} uds") def vender(self, cantidad): if cantidad > self._stock: raise ValueError(f"Stock insuficiente (hay {self._stock})") self._stock -= cantidad print(f" Venta de {self.nombre}: -{cantidad} → {self._stock} uds") # --- Métodos especiales --- def __str__(self): return f"{self.nombre} — ${self._precio:.2f} ({self._stock} en stock)" def __repr__(self): return f"Producto('{self.nombre}', {self._precio}, {self._stock})" @classmethod def total(cls): return cls._total_productos # Crear productos laptop = Producto("Laptop", 1200, 5) mouse = Producto("Mouse", 25, 20) print("=== Catálogo ===") print(laptop) print(mouse) print() print("=== Operaciones ===") laptop.agregar_stock(3) laptop.vender(2) mouse.vender(5) print() print("=== Modificar precio ===") laptop.precio = 999 print(f"Nuevo precio: ${laptop.precio}") print() print(f"Total de productos creados: {Producto.total()}")