logo

Dunder o mètodes màgics en Python

Mètodes Python Magic són els mètodes que comencen i acaben amb guions baixos dobles '__'. Estan definits per classes integrades a Python i s'utilitzen habitualment per a la sobrecàrrega d'operadors.

També s'anomenen mètodes Dunder, Dunder aquí significa Doble sota (Guanyes baixes).



Mètodes màgics de Python

Les classes integrades defineixen molts mètodes màgics, vostè() La funció pot mostrar-vos mètodes màgics heretats per una classe.

Exemple:

Aquest codi mostra els mètodes màgics heretats per int classe.



Python 3






# code> print>(>dir>(>int>))>

>

>

Sortida

['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '_...>

O bé, podeu provar cmd/terminal per obtenir la llista de funcions màgiques a Python, obrir cmd o terminal, escriviu python3 per anar a la consola de Python i escriviu:

>>> dir(int)>

Sortida:

Mètodes màgics en Python

Mètodes màgics de Python

A continuació es mostren les llistes de mètodes de màgia de Python i els seus usos.

Inicialització i construcció

  • __nou__ : Per ser cridat en la instanciació d'un objecte.
  • __calent__ : Per ser cridat pel mètode __new__.
  • __del__ : És el destructor.

Mètodes de màgia numèrica

memòria de registre
  • __tronc__ (self): Implementa el comportament per a math.trunc()
  • __ceil__ (self): Implementa el comportament per a math.ceil()
  • __pis__ (self): Implementa el comportament per a math.floor()
  • __rodona__ (self,n): Implementa el comportament per a la ronda integrada ()
  • __invertir__(self): Implementa el comportament per a la inversió mitjançant l'operador ~.
  • __abs__(self): Implementa el comportament de l'abs () integrat
  • __neg__(self): Implementa el comportament per a la negació
  • __pos__(self): Implementa un comportament per a un positiu unari

Operadors aritmètics

  • __afegir__ (un mateix, un altre): Implementa el comportament per a math.trunc()
  • __sub__(un mateix, un altre): Implementa el comportament per a math.ceil()
  • __Jo tinc__ (un mateix, un altre): Implementa el comportament per a math.floor()
  • __floordiv__ (un mateix, un altre): Implementa el comportament per a la ronda integrada ()
  • __div__(self, other): Implementa el comportament per a la inversió mitjançant l'operador ~.
  • __truediv__(un mateix, un altre): Implementa el comportament de l'abs () integrat
  • __mod__(self, other): Implementa el comportament per a la negació
  • __divmod__(self, other): Implementa un comportament per a un positiu unari
  • __pow__: Implementa el comportament dels exponents mitjançant l'operador **.
  • __lshift__(self, other): Implementa el desplaçament a l'esquerra mitjançant l'operador <<.
  • __rshift__(self, other): Implementa el desplaçament a la dreta mitjançant l'operador>>.
  • __i__(un mateix, un altre): Implementa bit a bit i utilitza l'operador &.
  • __o__(un mateix, un altre): Implementa bit a bit o utilitzant el | operador.
  • __xor__(un mateix, un altre): Implementa xor bit a bit utilitzant l'operador ^.

Mètodes màgics de cordes

  • __str__ (self): Defineix el comportament per quan es crida a str() en una instància de la teva classe.
  • __repr_ _(self): T o es crida pel mètode repr() integrat per retornar una representació d'un tipus llegible per màquina.
  • __unicode__(self): Aquest mètode per retornar una cadena Unicode d'un tipus.
  • __format__(self, formatstr): retorna un nou estil de corda.
  • __hash_ _(self): Ha de retornar un nombre enter i el seu resultat s'utilitza per a una comparació ràpida de claus als diccionaris.
  • __no zero__(self): Defineix el comportament per quan es crida a bool() en una instància de la vostra classe.
  • __vostè_ _(self): Aquest mètode per retornar una llista d'atributs d'una classe.
  • __mida de__( jo): Torna la mida de l'objecte.

Comparació de mètodes màgics

  • __eq__ (un mateix, un altre): Defineix el comportament de l'operador d'igualtat, ==.
  • __ne__(un mateix, un altre): Defineix el comportament de l'operador de desigualtat, !=.
  • __lt__ (un mateix, un altre): Defineix el comportament de l'operador menor que, <.
  • __gt__ (un mateix, un altre): Defineix el comportament de l'operador major que,>.
  • __le__(self, other): Defineix el comportament de l'operador inferior o igual a, <=.
  • __ge__ (un mateix, un altre): Defineix el comportament de l'operador major que o igual a>=.

Dunder o mètodes màgics en Python

Vegem alguns dels mètodes màgics de Python amb exemples:

1. Mètode __init__

El mètode __init__ perquè la inicialització s'invoca sense cap trucada, quan es crea una instància d'una classe, com els constructors en alguns altres llenguatges de programació com ara C++, Java, C#, PHP, etc.

Aquests mètodes són el motiu pel qual podem afegir dues cadenes amb l'operador '+' sense cap tipus de text explícit.

Python 3




# 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)>

>

>

Sortida

>

2. Mètode __repr__

__repr__ El mètode de Python defineix com es presenta un objecte com una cadena.

llista de matrius ordenada en java

El fragment de codi següent imprimeix només l'adreça de memòria de l'objecte de cadena. Afegim un mètode __repr__ per representar el nostre objecte.

Python 3




# 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)>

>

>

Sortida

Object: Hello>

Si intentem afegir-hi una cadena:

Python 3




# 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'>)>

>

>

Sortida:

  TypeError  : unsupported operand type(s) for +: 'String' and 'str'>

3. Mètode __afegir__

__afegir__ mètode a Python defineix com s'afegiran els objectes d'una classe. També es coneix com a operador d'addició sobrecarregada.

Ara afegiu el mètode __add__ a la classe String:

Python




# 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'>)>

>

>

1 de 1000
Sortida

Hello Geeks>

Hem comentat alguns dels mètodes màgics de Python o mètodes Dunder. Els mètodes màgics de Python es poden utilitzar per a diferents funcionalitats de la vostra classe.

Espero que aprenguis sobre els mètodes màgics de Python d'aquest article i que l'utilitzis en els teus projectes.