Google+ Seguidores

jueves, 28 de junio de 2018

Métodos Mágicos - Programación en Python

Introducción:

Hola amigos de Internet, les doy nuevamente la bienvenida  a Mi Diario Python, el mejor blog para Aprender Python.

En el día de hoy repasaremos los Métodos Mágicos que tiene Python. Ya hemos visto el uso de estos métodos, pero en el día de hoy les daremos un articulo propio, ya que se lo merecen.

Métodos Mágicos:

Resultado de imagen para __init__ python

Los métodos mágicos son métodos especiales que tienen doble guion bajo al principio y al final de sus nombres. Son también conocidos en inglés como dunders (de doble underscores). Son utilizadas para crear funcionalidades que no pueden ser representadas en un método regular.

Un uso común de estos es la sobrecarga de operadores. Esto significa definir operadores para clases personalizadas que permiten que operadores tales como + o * sean utilizados en ellas. Un ejemplo de un método mágico es __add__ para +.

class Vector2D:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        
    def __add__(self, other):
        return Vector2D(self.x + other.x, self.y + other.y)
    
first = Vector2D(5, 7)
second = Vector2D(3,9)
result = first + second
print(result.x)
print(result.y)

8
16

Y ese seria el resultado. El método __add__ permite la definición de un comportamiento personalizado para el operador + en nuestra clase. Como pueden observar, suma los atributos correspondientes de los objetos que contiene el resultado. Una vez definido, podemos sumar dos objetos de una clase entre sí.

A continuación les mencionare algunos métodos mágicos:

  • __sub__ para -
  • __mul__ para *
  • __truediv__ para /
  • floordiv para //
  • __mod__ para %
  • __pow__ para **
  • __and__ para &
  • __or__ para |
La expresión x + y se traduce a:

x.__add__(y)

Sin embargo, si x no ha implementado __add__, y además "x" y "y" son de tipos deferentes, entonces y.__radd__(x) es llamado.

Hay métodos r equivalentes para todos los métodos mágicos que se acaban de mencionar.

class SpecialString:
    def __init__(self, count):
        self.count = count
        
    def __truediv__(self, other):
        line = "=" * len(other.count)
        return "\n".join([self.count, line, other.count])
spam = SpecialString("spam")
hello = SpecialString("hello world!")
print(spam / hello)

spam
============
hello world!

Python también ofrece métodos mágicos para comparaciones.

  • __it__ para <
  • __le__ para <=
  • __eq__ para ==
  • __ne__ para !=
  • __gt__ para >
  • __ge__ para >=

Hay varios métodos mágicos para hacer que las clases actúen como contenedores.

  • __len__ para len()
  • __getitem__ para indexar
  • __setitem__ para asignar valores indexados
  • __delitem__ para borrar valores indexados
  • __iter__ para iteración sobre objetos
  • __contains__ para in

¿Con ganas de más? Dale un vistazo a este documento: Métodos Mágicos en Python.

¿Alguna duda? Entonces no dudes en dejar un comentario.

Mi nombre es Luis, y fue un placer compartir mis conocimientos con todos ustedes :D.

2 comentarios :
Write comentarios
  1. La explicacion del uso de __radd__ no es muy aclaradora

    ResponderEliminar
  2. Bien Luis, tu ejemplo quedaría perfecto si además usaras __repr__ para devolver (8,16) al llamar print(result)

    ResponderEliminar

Tu comentario es importante y nos motiva a seguir escribiendo...

Powered by Blogger .