Python魔法函數


一.什么是魔法函數

  Python內置的以雙下划線開頭並以雙下划線結尾的函數(不能自己定義,沒有用),如__init__(),__str__(),__getitem()__等很多,用於實現並定制很多特性,非常靈活,且是隱式調用的。

  如__getitem__()可以把類變成一個可迭代的對象(一次一次取數據,直到拋異常):

 

 

 

 

 

二.Python的數據模型以及數據模型對Python的影響

  魔法函數會直接影響到Python語法本身,如讓類變成可迭代的對象,也會影響Python的一些內置函數的調用,如實現__len__()能對對象調用len()方法。

 

三.魔法函數一覽

  1.非數學運算:

    1.1字符串表示:__repr__,__str__

      __str__:定制字符串格式化(類到字符串),__repr__類似,但是是開發模式下

 

    1.2集合序列相關:__len__,__getitem__,__setitem__,__delitem__,__contains__

    1.3迭代相關:__iter__,__next__

    1.4可調用:__call__

    1.5with上下文管理器:__enter__,__exit__

    1.6數值轉換:__abs__,__bool__,__int__,__float__,__hash__,__index__

    1.7元類相關:__new__,__init__

    1.8屬性相關:__getattr__、 __setattr__,__getattribute__、setattribute__,__dir__

    1.9屬性描述符:__get__、__set__、 __delete__

    1.10協程:__await__、__aiter__、__anext__、__aenter__、__aexit__

  2.數學運算:

    2.1一元運算符:__neg__(-)、__pos__(+)、__abs__

    自定制__abs__也影響了abs()內置方法

    

 

    2.2二元運算符:__lt__(<)、 __le__ <= 、 __eq__ == 、 __ne__ != 、 __gt__ > 、 __ge__ >=

    2.3算術運算符:__add__ + 、 __sub__ - 、 __mul__ * 、 __truediv__ / 、 __floordiv__ // 、 __mod__ % 、 __divmod__ divmod() 、 __pow__ ** 或 pow() 、 __round__ round()

      

 

    2.4反向算術運算符:__radd__ 、 __rsub__ 、 __rmul__ 、 __rtruediv__ 、 __rfloordiv__ 、 __rmod__ 、__rdivmod__ 、 __rpow__

    2.5增量賦值算術運算符:__iadd__ 、 __isub__ 、 __imul__ 、 __itruediv__ 、 __ifloordiv__ 、 __imod__ 、__ipow__

    2.6位運算符:__invert__ ~ 、 __lshift__ << 、 __rshift__ >> 、 __and__ & 、 __or__ | 、 __xor__ ^

    2.7反向位運算符:__rlshift__ 、 __rrshift__ 、 __rand__ 、 __rxor__ 、 __ror__

    2.8增量賦值位運算符:__ilshift__ 、 __irshift__ 、 __iand__ 、 __ixor__ 、 __ior__

四.說明魔法函數的重要性(舉例len())

   如果len()方法調用的對象是Python內置的類型,如list,set,dict(cpython)等,會直接獲取(有一個數據表示長度),而不用去遍歷。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM