PythonProgramación Orientada a ObjetosLección 13 de 24
Clases y Objetos
Python es multiparadigma: puedes programar de forma procedural, funcional o orientada a objetos según lo que más convenga. Las clases en Python son muy expresivas. El decorador @property permite definir getters y setters con sintaxis de atributo, @classmethod crea métodos que reciben la clase en lugar de la instancia, y @staticmethod crea métodos que no dependen ni de la instancia ni de la clase.
class Vehiculo:
# Atributo de clase (compartido)
ruedas = 4
def __init__(self, marca, modelo, anio):
# Atributos de instancia
self.marca = marca
self.modelo = modelo
self.anio = anio
self.__velocidad = 0 # Privado (name mangling)
def acelerar(self, cantidad):
self.__velocidad += cantidad
# Property (getter/setter elegante)
@property
def velocidad(self):
return self.__velocidad
@velocidad.setter
def velocidad(self, valor):
if valor < 0:
raise ValueError("La velocidad no puede ser negativa")
self.__velocidad = valor
# Método especial (dunder)
def __str__(self):
return f"{self.marca} {self.modelo} ({self.anio})"
def __repr__(self):
return f"Vehiculo(marca={self.marca!r}, modelo={self.modelo!r})"
@classmethod
def desde_string(cls, texto):
partes = texto.split(",")
return cls(partes[0], partes[1], int(partes[2]))
@staticmethod
def es_anio_valido(anio):
return 1886 <= anio <= 2030
auto = Vehiculo("Toyota", "Corolla", 2023)
print(auto) # Toyota Corolla (2023)
print(auto.velocidad) # 0
auto.velocidad = 60 # Usa setter
Consejo🔍 Los métodos dunder (__str__, __repr__, __len__, etc.) son la forma de Python para operadores y comportamientos especiales.
Practica esta lección
Resuelve los ejercicios del curso de Python en la app, gratis y con corrección automática.
Empezar a practicar