1. 程式人生 > >python 類的常見的特殊成員

python 類的常見的特殊成員

# 類的特殊成員
class gg:
    '''
    這裡都是特殊類成員方法,在觸發後這些方法都根據這些方法自動傳遞的引數就行程式碼的編寫
    '''
    #print(gg.__doc__)  # 檢視類的描述資訊
    def __init__(self,name):  #初始化物件  #類名() 建立物件的時候自動建立
        self.name = name
        self.data = {'key':'cisco'}#定義一個類中的字典

    def __call__(self, *args, **kwargs):  #觸發執行,使用  物件() 就會自動執行該方法的內容
print('call 觸發後執行這裡的程式碼') def __getitem__(self, item):# 使用物件['key'] 後自動呼叫, 會將'key' 的值傳到item print('隨你喜歡,你可以對傳遞過來的值任意蹂躪') return self.data[item] def __setitem__(self, key, value): #物件['key'] = 'value' 後會自動呼叫,像字典一樣傳值到對應的引數中 print(key,value ,'進行自由的程式碼操作的,拿到這兩個值之後可以隨便操作
') self.data[key] = value def __delitem__(self, key):# 像字典一樣,使用del 物件['key'] 會自動執行 print('我是%s,如果喜歡可以按照字典的方式對類的key進行刪除如下:'%key) del self.data[key] def __enter__(self): #使用with 物件 + as b 的時候 自動呼叫 print('進來了,自動執行後的隨意程式碼區,可以隨便編寫') def __exit__(self, exc_type, exc_val, exc_tb):#
使用with 物件 + as b 的時候 自動呼叫 print('出去了,自動執行後的隨意程式碼區,可以隨便編寫') def __add__(self, other): # 兩個物件相加的的時候進行呼叫 print('自動執行後的隨意程式碼區,可以隨便編寫') def __str__(self): #在對應物件的時候呼叫並返回相應的return後面的 內容 通過列印呼叫 也可以使用str(物件) print('自動執行後的隨意程式碼區,可以隨便編寫') return '列印物件的時候就將這裡的內容進行返回' def __repr__(self): #轉化為解析器讀取的形式, 呼叫時repr(物件) pass def __hash__(self):#設定本物件的hash 的功能,如果直接在物件的後面新增__hash__ = None 的話,該物件不能被進行雜湊 return '可以給自己定義的物件設定可以hash的功能' def __new__(cls, *args, **kwargs):#構造方法__new__ 開闢記憶體,觸發 __init__建立例項 return object.__new__(cls) def __cmp__(self,x): #物件比較 呼叫方法 cmp(物件,x) pass def __del__(self): #析構方法:當物件在記憶體中被釋放時,自動觸發執行 del 物件 pass a = gg('panzhenwei') # 觸發__new__ __init__ print(gg.__module__) # 檢視當前操作的模組是哪個 print(gg.__class__) #檢視當前操作的類是哪個 print(gg.__dict__) # 檢視類或物件的成員,類只是列印類的成員不列印物件的成員 print(a.__dict__) # 檢視類或物件的成員,物件只對應物件的成員,不列印類的成員 print(a ) #觸發__str__ a() # 觸發__call__ a['name'] = 'cisco'# 觸發__setitem__ a['name'] # 觸發__getitem__ del a['name'] # 觸發__delitem with a as f: # 自動觸發__enter__ 和__exit__ print('列印這裡的時候已經觸發了__enter__') print('程式碼執行到這裡,說明已經退出了上面的控制代碼,已經觸發完__exit__') # 來自菜鳥程式設計的示例 class Vector: def __init__(self, a, b): self.a = a self.b = b def __str__(self): return 'Vector (%d, %d)' % (self.a, self.b) def __add__(self, other): return Vector(self.a + other.a, self.b + other.b) v1 = Vector(2, 10)# 觸發__new__ __init__ v2 = Vector(5, -2)# 觸發__new__ __init__ print(v1 + v2) # 觸發__add__, 觸發__new__ __init__ 觸發__str__

#結果 Vector(7,8) #這個是字串