logo

Dunder nebo magické metody v Pythonu

Metody magie Pythonu jsou metody začínající a končící dvojitým podtržením „__“. Jsou definovány vestavěnými třídami v Pythonu a běžně se používají pro přetěžování operátorů.

Jsou také tzv Dunderovy metody, Dunder zde znamená Double Under (Podtržení).



Magické metody Pythonu

Vestavěné třídy definují mnoho magických metod, vy() Funkce vám může ukázat magické metody zděděné třídou.

Příklad:

Tento kód zobrazuje magické metody zděděné uživatelem int třída.



Python3






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

>

>

Výstup

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

Nebo můžete zkusit cmd/terminal, abyste získali seznam magických funkcí v Pythonu, otevřete cmd nebo terminál, zadejte python3 pro přechod do konzole Pythonu a zadejte:

>>> say(int)>>> 

Výstup:

Magické metody v Pythonu

Magické metody Pythonu

Níže jsou uvedeny seznamy magických metod Pythonu a jejich použití.

Inicializace a konstrukce

  • __Nový__ : Chcete-li být voláni při vytváření instance objektu.
  • __horký__ : Chcete-li získat volání metodou __new__.
  • __z__ : Je to destruktor.

Numerické magické metody

co je zásobník v Javě
  • __kmen__ (já): Implementuje chování pro math.trunc()
  • __ceil__ (já): Implementuje chování pro math.ceil()
  • __podlaha__ (já): Implementuje chování pro math.floor()
  • __kolo__ (self,n): Implementuje chování pro vestavěnou round()
  • __invert__(self): Implementuje chování pro inverzi pomocí operátoru ~.
  • __abs__(já): Implementuje chování pro vestavěnou abs()
  • __neg__(sebe): Implementuje chování pro negaci
  • __pos__(self): Implementuje chování pro unární pozitivní

Aritmetické operátory

  • __přidat__ (já, jiný): Implementuje chování pro math.trunc()
  • __sub__(já, jiný): Implementuje chování pro math.ceil()
  • __Mám__ (já, jiný): Implementuje chování pro math.floor()
  • __floordiv__ (já, jiný): Implementuje chování pro vestavěnou round()
  • __div__(self, other): Implementuje chování pro inverzi pomocí operátoru ~.
  • __truediv__(já, jiný): Implementuje chování pro vestavěnou abs()
  • __mod__(self, other): Implementuje chování pro negaci
  • __divmod__(self, other): Implementuje chování pro unární pozitivní
  • __pow__: Implementuje chování pro exponenty pomocí operátoru **.
  • __lshift__(já, jiný): Implementuje levý bitový posun pomocí operátoru <<.
  • __rshift__(já, jiný): Implementuje pravý bitový posun pomocí operátoru>>.
  • __and__(já, jiný): Implementuje bitově a pomocí operátoru &.
  • __nebo__(já, jiný): Implementuje bitově nebo pomocí | operátor.
  • __xor__(já, jiný): Implementuje bitový xor pomocí operátoru ^.

Metody magie strun

  • __str__ (já): Definuje chování při volání str() na instanci vaší třídy.
  • __repr_ _(já): T o volání pomocí vestavěné metody repr() k vrácení strojově čitelné reprezentace typu.
  • __unicode__(self): Tato metoda vrátí řetězec typu unicode.
  • __format__(self, formatstr): vrátit nový styl struny.
  • __hash_ _(já): Musí vrátit celé číslo a jeho výsledek se používá pro rychlé porovnání klíčů ve slovnících.
  • __nenulová__(vlastní): Definuje chování, když je v instanci vaší třídy volána funkce bool().
  • __vy_ _(já): Tato metoda vrátí seznam atributů třídy.
  • __velikost__( já): Vrací velikost objektu.

Srovnání magických metod

  • __eq__ (já, jiný): Definuje chování operátoru rovnosti ==.
  • __ne__(já, jiný): Definuje chování operátoru nerovnosti, !=.
  • __lt__ (já, jiný): Definuje chování pro operátor menší než <.
  • __gt__ (já, jiný): Definuje chování pro operátor větší než,>.
  • __le__(já, jiný): Definuje chování pro operátor menší než nebo rovno, <=.
  • __ge__ (já, jiný): Definuje chování pro operátor větší než nebo rovno,>=.

Dunder nebo magické metody v Pythonu

Podívejme se na některé magické metody Pythonu s příklady:

1. Metoda __init__

The metoda __init__ inicializace je vyvolána bez jakéhokoli volání, když je vytvořena instance třídy, jako jsou konstruktory v některých jiných programovacích jazycích, jako je C++, Java, C#, PHP atd.

Tyto metody jsou důvodem, proč můžeme přidat dva řetězce pomocí operátoru „+“ bez jakéhokoli explicitního přetypování.

Python3


kdo vymyslel školu



# 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ýstup

>

2. metoda __repr__

__repr__ metoda v Pythonu definuje, jak je objekt prezentován jako řetězec.

Níže uvedený fragment kódu vytiskne pouze paměťovou adresu objektu typu string. K reprezentaci našeho objektu přidáme metodu __repr__.

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

>

>

Výstup

Object: Hello>

Pokud se k tomu pokusíme přidat řetězec:

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

>

>

Výstup:

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

3. Metoda __add__

__add__ metoda v Pythonu definuje, jak se budou objekty třídy sčítat. Je také známý jako přetížený operátor sčítání.

Nyní přidejte metodu __add__ do třídy String:

Krajta

vyvoláte zpracování výjimek v jazyce Java




# 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ýstup

Hello Geeks>

Probrali jsme některé magické metody Pythonu nebo metody Dunder. Magické metody v Pythonu lze použít pro různé funkce ve vaší třídě.

Doufám, že se z tohoto článku dozvíte o magických metodách Pythonu a použijete je ve svých projektech.