日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python之路-双下方法

發布時間:2024/7/5 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python之路-双下方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

雙下方法

定義: 雙下方法是特殊方法,他是解釋器提供的,由雙下線加方法名加雙下劃線 __方法名__具有特殊意義的方法 雙下方法主要是Python源碼程序員使用的,元編程 我們在開發中盡量不要使用雙下方法,但是深入研究雙下方法,更有益于我們閱讀源碼

1.__len__ 計算長度

s = 'nihaoashuaige' print(len(s)) #len作為內置函數,部分數據類型調用它的時候就會返回其長度,那是什么讓這個函數起了這樣的作用呢 #看一下字符串的str類的內容里有__len__方法,所以調用len內置函數,其實就是觸發了__len__方法

?

class A:def __init__(self,name,age):self.name = nameself.age = agedef __len__(self):print('調用len方法')return len(self.__dict__) obj = A('','24') print(len(obj)) 打印結果: 調用len方法 2 觸發機制: 調用len,就立即觸發了__len__方法,并執行里面的內容

2.__hash__

#我們之前說過,可hash的就是不可變的數據類型,那么這個是如何進行判斷的呢 print(hash('nihao')) #返回一串數字 print(hash(123)) #返回一串數字 print(hash([1,2,3])) #報錯 打印結果: -3334696613266170804 123

?

3.__str__

class A:def __init__(self,name,age):self.name = nameself.age = agedef __str__(self): #打印的時候返回的結果值return self.name obj = A('nihao',18) print(obj) 打印結果: nihao

?

4.__repr__

repr內置函數,原形畢露,調用repr,則觸發__repr__方法,返回其原始值

class A:def __repr__(self):return 'nihao' obj = A() print(repr(obj)) 打印結果: nihao

?

5.__call__ 對象后面加(),觸發執行

class A:def __init__(self):print(111)def __call__(self, *args, **kwargs):print(666) obj = A() obj() ##對象+()觸發__call__方法 打印結果: 111 666

?

6.__eq__

class A:def __init__(self):self.a = 1self.b = 2def __eq__(self, other):print(666)return '比較' a = A() b = A() print(a == b) #同一個類的兩個實例進行比較,就會觸發類中的__eq__方法 打印結果: 666 比較

?

7.__del__

析構方法,當對象在內存中被釋放時,自動觸發執行。 注:此方法一般無須定義,因為Python是一門高級語言,程序員在使用時無需關心內存的分配和釋放,因為此工作都是交給Python解釋器來執行,所以,析構函數的調用是由解釋器在進行垃圾回收時自動觸發執行的。

8.__new__ 類名+()觸發__new__方法 構造方法

class A:def __init__(self,name,age):self.name = nameself.age = agedef __new__(cls, *args, **kwargs):print(666)return object.__new__(cls) obj = A('xiaohong','19') ##構造一個對象是先觸發__new__方法 單例模式(一個類只能實例化一個對象)

class A:__instance = Nonedef __new__(cls,*args,**kwargs):if not cls.__instance:obj = object.__new__(cls)cls.__instance = objreturn cls.__instance ret = A() print(ret) ret = A() print(ret) ret = A() print(ret) 打印結果: <__main__.A object at 0x00000263D5202B00> <__main__.A object at 0x00000263D5202B00> <__main__.A object at 0x00000263D5202B00>

?

9.__item__相關

當你對對象進行類似于字典的操作的時候,就會觸發相應的方法

class A:def __init__(self,name):self.name = namedef __getitem__(self, item):return self.__dict__[item]def __setitem__(self, key, value):self.__dict__[key] = valuedef __delitem__(self, key):print('刪除的時候執行我') ret = A('nihao') print(ret['name']) #執行getitem ret['name'] = 'xiaohong' #執行setitem print(ret.__dict__) del ret['name'] #執行delitem 打印結果: nihao {'name': 'xiaohong'} 刪除的時候執行我

?

10.上下文管理器相關(__enter__ 和 __exit__)

class A:def __init__(self,text):self.text = textdef __enter__(self): #開啟上下文管理器時執行此方法self.text = self.text + '來了'return selfdef __exit__(self, exc_type, exc_val, exc_tb): #執行完上下文管理器時執行此方法self.text = self.text + '走了'return self obj = A('baobao') with obj as f:print(f.text) print(f.text) 打印結果: baobao來了 baobao來了走了

?

?

?

?

?

轉載于:https://www.cnblogs.com/Ailsa-a/p/10519885.html

總結

以上是生活随笔為你收集整理的python之路-双下方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。