Métodos Especiales: La Magia de los Dunder Methods
En Python, existen métodos con nombres que empiezan y terminan con dos guiones bajos, como __init__. Estos se llaman Métodos Especiales o Dunder Methods. Su propósito es permitir que tus objetos se comporten como tipos de datos integrados (como listas o números).
1. Representación de Objetos: __str__ y __repr__
Cuando intentas imprimir un objeto sin estos métodos, Python muestra algo poco útil como <__main__.Auto object at 0x7f...>.
__str__: Se usa para dar una representación legible para el usuario final. Es lo que se ejecuta cuando llamas aprint()ostr().__repr__: Se usa para una representación técnica enfocada en el desarrollador (útil para depuración).
2. Sobrecarga de Operadores: __add__ y __eq__
¿Alguna vez te has preguntado cómo Python sabe sumar dos números pero no puede sumar dos objetos "Persona"? Puedes enseñarle usando la sobrecarga de operadores:
__add__(self, otro): Define qué sucede cuando usas el operador+.__sub__(self, otro): Define el comportamiento del operador-.__eq__(self, otro): Define cuándo dos objetos se consideran iguales al usar==.
Ejemplo: Si tienes una clase
Caja, podrías definir queCaja1 + Caja2devuelva una nueva caja con el volumen de ambas sumado.
3. Contenedores y Longitud: __len__ e __getitem__
Si tu clase guarda una colección de datos, puedes hacer que se comporte como una lista:
* __len__: Permite usar la función len(objeto).
* __getitem__: Permite acceder a datos usando corchetes: objeto[índice].
Reto: La Biblioteca Personal
Vamos a crear una clase Libro. Queremos que al imprimir el objeto nos dé el título y el autor, y que al comparar dos libros con ==, nos diga que son iguales si tienen el mismo título.
Instrucciones:
1. Crea la clase Libro con un constructor que reciba titulo y autor.
2. Define el método __str__ para que retorne: "Título de Autor".
3. Define el método __eq__ para comparar el atributo titulo de self con el de otro.
4. Crea dos objetos: libro1 y libro2, ambos con el título 'Python Básico'.
5. Crea la variable son_iguales comparando libro1 == libro2.
# Implementa la magia de los Dunder Methods: