python類中幾個特殊方法


class TT:
    def __init__(self):
        print "__init__"

    def __call__(self):
        print "__call__"

    def __str__(self):
        return "__str__"
    
    def __int__(self):
        return "__int__"

    def __add__(self,other):
        return "__add__"

    def __sub__(self,other):
        return "__sub__"

    def __mul__(self,other):
        return "__mul__"

    def __div__(self,other):
        return "__div__" 
def __del__(self): print "析構函數被調用"

 

在Python中,定義一個類TT如上,那么

  • 執行 obj = TT()方法,將自動調用TT中的 __init__ 方法
  • 在執行obj() 或者TT()(),即類成員后加括號方式調用,則會自動調用 __call__ 方法
  • 如果要將對象轉換為int類型,即ret = int(obj)則會自動調用類的 __int__ 方法,並將返回值賦值給左邊變量
  • 同樣如果需要將對象轉換為str類型,即ret = str(obj)則會自動調用類的 __str__方法,並將返回值賦值給左邊變量
  • 調用print(obj)方法,等同於調用print(str(obj))方法,最終也會調用到類的 __str__方法
  • 兩個對象相加時候,則會自動調用第一個對象的 __add__方法,並將第一個個對象當做參數傳入這個方法中,同理還有 __sub__、__mul__、__div__
  • 析構函數,即__del__,在對象銷毀的時候自動調用
  • obj.__dict__,會將obj對象中的成員以詞典方式展示出來;TT.__dict__會將類中的成員以詞典方式展示出來
  • 如果想要像列表那樣通過li[0]、li[1] = 10、del li[0]的方式訪問自己定義的類,需要分別實現__getitem__,__setitem__、__delitem__
    def __getitem__(self,item):
        return XXX 
    
    def __setitem__(self,item,value)
        pass
    
    def __delitem__(self,item):
        pass

     

如下所示:  

obj = TT()       # __init__
obj()            # __call__
print(int(obj))  # __int__
print(str(obj))  # __str__
print(obj)     # __str__
print(obj+50)     # __add__
print(obj-50)     # __sub__
print(obj*50)     # __mul__
print(obj/50)     # __div__
del obj           # 析構函數被調用

 

 對於python中可迭代對象,執行for循環時候,內部執行邏輯:

  1. 調用可迭代對象的__iter__方法,並獲取其返回值
  2. 循環上一步獲取的值

因此,如果需要我們自定義的對象可迭代,則需要實現__iter__(返回值需要為可迭代對象)。

 

 

 

 

 


免責聲明!

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



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