Ir al contenido principal

Métodos mágicos en Python



Los métodos Dunder o magic en Python son los métodos que tienen dos guiones bajos de prefijo y sufijo en el nombre del método. Dunder aquí significa "Double Under (subrayado)". Estos se usan comúnmente para la sobrecarga del operador. Pocos ejemplos de métodos mágicos son: __init__, __add__, __len__, __repr__ etc.

El método __init__ para la inicialización se invoca sin ninguna llamada, cuando se crea una instancia de una clase, como los constructores en ciertos otros lenguajes de programación como C ++, Java, C #, PHP, etc. Estos métodos son la razón por la que podemos agregar dos cadenas con ' + 'operador sin ningún tipo de conversión explícito.

Aquí hay una implementación simple:

# declare our own string class
class String:
         # magic method to initiate object
def __init__(self, string):
self.string = string
# Driver Code
if __name__ == '__main__': 
# object creation
string1 = String('Hello')
# print object location
print(string1) 

El fragmento de código anterior solo imprime la dirección de memoria del objeto de cadena. 

Agreguemos un método __repr__ para representar nuestro objeto.

# declare our own string class
class String: 
# magic method to initiate object
def __init__(self, string):
self.string = string 
# print our string object
def __repr__(self):
return 'Object: {}'.format(self.string)
# Driver Code
if __name__ == '__main__':
# object creation
string1 = String('Hello')
# print object location
print(string1) 

Si intentamos agregarle una cadena:

# declare our own string class
class String:
# magic method to initiate object
def __init__(self, string):
self.string = string  # print our string object
def __repr__(self):
return 'Object: {}'.format(self.string)
# Driver Code
if __name__ == '__main__':
# object creation
string1 = String('Hello')
# concatenate String object and a string
print(string1 +' world') 

Ahora agregue el método __add__ a la clase String:

# declare our own string class
class String:
# magic method to initiate object
def __init__(self, string):
self.string = string  # print our string object
def __repr__(self):
return 'Object: {}'.format(self.string)  def __add__(self, other):
return self.string + other
# Driver Code
if __name__ == '__main__':  # object creation
string1 = String('Hello')  # concatenate String object and a string
print(string1 +' Geeks') 


Comentarios

Entradas populares de este blog

Preguntas y respuestas sobre Raspberry Pi

¿Le resulta difícil buscar respuestas a sus preguntas sobre Raspberry Pi? ¿Busca ayuda para comenzar un proyecto? ¿Tiene alguna pregunta que necesita respuesta? ¿Una pregunta para la que solo has hecho investigación básica? ¿Tal vez algo que piensas que todos menos tú sabes? P: ¿Alguien tiene alguna idea de lo que puedo hacer con mi Pi? A: Prácticamente cualquier cosa, puedes ver infinidad de proyectos en internet . P: Mi Pi se comporta de manera extraña, ¿qué hago? R: La tarjeta SD es mala o problemas de energía. El 99.999% de las veces es una de estas dos cosas. P: ¿Qué modelo de Raspberry Pi debería obtener? R: Obtenga la Raspberry Pi 4B con 4GB de RAM P: ¿Puedo usar la tarjeta SD de otra Pi en mi Pi 4? R: Solo si la tarjeta SD ya tiene Raspbian Buster P: Encontré una guía antigua que me dice exactamente cómo hacer algo, ¿debería seguirla? A: Sí, síguelo. Si te quedas atascado, regresa y describe en google el paso exacto en el que estás atascado. P: ¿Cuándo se l...

Tarea de Cálculo día 30/11/2010

Nuestro profe de cálculo nos ha asignado el cometido de realizar unas tareas para el dia que os digo en el titulo. Me he puesto "to" la tarde en resolver algunos de los ejercicios, he podido el primero y el segundo, os dejo los resultados y me comentaís si os coincide. Si a alguien le interesa q me lo diga y publico un post de como los he hecho. EJERCICIOS 1 y 2 TAREA 30-11-2010