logo

Dunder alebo magické metódy v Pythone

Metódy Python Magic sú metódy začínajúce a končiace dvojitým podčiarkovníkom „__“. Sú definované vstavanými triedami v Pythone a bežne sa používajú na preťaženie operátorov.

Sú tiež tzv Dunderove metódy, Dunder tu znamená Double Under (Podčiarknutia).



Python Magic Methods

Zabudované triedy definujú mnoho magických metód, ty() funkcia vám môže ukázať magické metódy zdedené triedou.

Príklad:

Tento kód zobrazuje magické metódy zdedené int trieda.



Python3






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

>

>

Výkon

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

Alebo môžete skúsiť cmd/terminal na získanie zoznamu magických funkcií v Pythone, otvorte cmd alebo terminál, napíšte python3, aby ste prešli do konzoly Python, a napíšte:

>>> povedať (int)>>> 

Výkon:

Magické metódy v Pythone

Python Magic Methods

Nižšie sú uvedené zoznamy magických metód Pythonu a ich použitia.

Inicializácia a konštrukcia

  • __Nový__ : Na zavolanie pri vytváraní inštancie objektu.
  • __horúce__ : Na zavolanie metódou __new__.
  • __z__ : Je to deštruktor.

Numerické magické metódy

ostrovček java
  • __kmeň__ (ja): Implementuje správanie pre math.trunc()
  • __ceil__ (ja): Implementuje správanie pre math.ceil()
  • __poschodie__ (ja): Implementuje správanie pre math.floor()
  • __okrúhly__ (self,n): Implementuje správanie pre vstavaný round()
  • __invert__(self): Implementuje správanie pre inverziu pomocou operátora ~.
  • __abs__(ja): Implementuje správanie pre vstavanú funkciu abs()
  • __neg__(ja): Implementuje správanie pre negáciu
  • __pos__(self): Implementuje správanie pre unárne pozitívne

Aritmetické operátory

  • __pridať__ (ja, iný): Implementuje správanie pre math.trunc()
  • __sub__(ja, iné): Implementuje správanie pre math.ceil()
  • __Mám__ (ja, iný): Implementuje správanie pre math.floor()
  • __floordiv__ (ja, iný): Implementuje správanie pre vstavaný round()
  • __div__(ja, iné): Implementuje správanie pre inverziu pomocou operátora ~.
  • __truediv__(ja, iné): Implementuje správanie pre vstavanú funkciu abs()
  • __mod__(self, other): Implementuje správanie pre negáciu
  • __divmod__(ja, iné): Implementuje správanie pre unárne pozitívne
  • __pow__: Implementuje správanie pre exponenty pomocou operátora **.
  • __lshift__(ja, iné): Implementuje ľavý bitový posun pomocou operátora <<.
  • __rshift__(ja, iné): Implementuje pravý bitový posun pomocou operátora>>.
  • __and__(ja, iné): Implementuje sa bitovo a pomocou operátora &.
  • __alebo__(ja, iné): Implementuje sa bitovo alebo pomocou | operátor.
  • __xor__(ja, iné): Implementuje bitový xor pomocou operátora ^.

Metódy mágie strún

  • __str__ (ja): Definuje správanie pri volaní str() v inštancii vašej triedy.
  • __repr_ _(ja): T o sa zavolá vstavanou metódou repr() na vrátenie strojovo čitateľnej reprezentácie typu.
  • __unicode__(self): Táto metóda vráti reťazec typu unicode.
  • __format__(self, formatstr): vrátiť nový štýl struny.
  • __hash_ _(ja): Musí vrátiť celé číslo a jeho výsledok sa používa na rýchle porovnanie kľúčov v slovníkoch.
  • __nenulová__(ja): Definuje správanie pri volaní bool() v inštancii vašej triedy.
  • __ty_ _(ja): Táto metóda vráti zoznam atribútov triedy.
  • __veľkosť__( ja): Vráti veľkosť objektu.

Porovnávacie magické metódy

  • __eq__ (ja, iný): Definuje správanie operátora rovnosti ==.
  • __ne__(ja, iné): Definuje správanie pre operátor nerovnosti, !=.
  • __lt__ (ja, iný): Definuje správanie operátora menšieho ako <.
  • __gt__ (ja, iný): Definuje správanie pre operátor väčší ako>.
  • __le__(ja, iné): Definuje správanie pre operátor menšie ako alebo rovné, <=.
  • __ge__ (ja, iný): Definuje správanie pre operátor väčší ako alebo rovný,>=.

Dunder alebo magické metódy v Pythone

Pozrime sa na niektoré magické metódy Pythonu s príkladmi:

1. Metóda __init__

The metóda __init__ inicializácia sa vyvolá bez akéhokoľvek volania, keď sa vytvorí inštancia triedy, ako sú konštruktory v niektorých iných programovacích jazykoch, ako sú C++, Java, C#, PHP atď.

Tieto metódy sú dôvodom, prečo môžeme pridať dva reťazce pomocou operátora „+“ bez akéhokoľvek explicitného pretypovania.

Python3




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

>

Výkon

>

2. Metóda __repr__

__repr__ metóda v Pythone definuje, ako je objekt prezentovaný ako reťazec.

Nižšie uvedený úryvok kódu vytlačí iba pamäťovú adresu objektu typu string. Pridajme metódu __repr__ na reprezentáciu nášho objektu.

Python3




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

>

>

číslovaná abeceda
Výkon

Object: Hello>

Ak sa k nemu pokúsime pridať reťazec:

Python3




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

>

javascript window.open
>

Výkon:

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

3. Metóda __pridať__

__add__ metóda v Pythone definuje, ako budú objekty triedy sčítané. Je tiež známy ako operátor preťaženia sčítania.

Teraz pridajte metódu __add__ do triedy 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'>)>

>

>

Výkon

Hello Geeks>

Diskutovali sme o niektorých magických metódach Pythonu alebo metódach Dunder. Magické metódy v Pythone môžu byť použité na rôzne funkcie vo vašej triede.

Dúfam, že sa z tohto článku dozviete o magických metódach Pythonu a použijete ich vo svojich projektoch.