Python魔術(shù)方法深入分析講解
前言
魔術(shù)方法就是一個類/對象中的方法,和普通方法唯一的不同是:普通方法需要調(diào)用,而魔術(shù)方法是在特定時刻自動觸發(fā)
__init__
初始化魔術(shù)方法
初始化魔術(shù)方法
如何觸發(fā):初始化對象時觸發(fā)
參數(shù):至少一個self
返回值:無
作用:初始化對象的成員
注:使用這個方式初始化的成員都是寫入對象中的,類中不存在
class Person: def __init__(self,name): self.name = name a = Person('lisan') print(a.name)
__new__
實例化魔術(shù)方法
如何觸發(fā):在實例化對象時觸發(fā)
參數(shù):至少一個cls,接收當前類
返回值:必須返回一個對象實例
作用:實例化對象
注意:實例化對象是Object類底層實現(xiàn),其他類繼承了Object的 __new__
才能夠?qū)崿F(xiàn)實例化對象。沒事別碰這個魔術(shù)方法,先觸發(fā)__new__
,才會觸發(fā)__init__
class Person: def __init__(self,name): print('------------init') self.name = name def __new__(cls,*args,**kwargs): print('----------new') return super(Person,cls).__new__(cls,*args,**kwargs) a = Person('lisan')
__call__
調(diào)用對象的魔術(shù)方法
如何觸發(fā):將對象當作函數(shù)調(diào)用時觸發(fā)對象()
參數(shù):至少一個self接收對象
返回值:根據(jù)情況而定
作用:可以將復(fù)雜的步驟進行合并操作,減少調(diào)用的步驟,方便使用
注意:無
class Person: def __init__(self): print('------------init') def __new__(cls ,*args ,**kwargs): print('----------new') ip = object.__new__(cls ,*args ,**kwargs) print(ip) return ip def __call__(self ,name): print('-----------call') print(f'執(zhí)行對象得到的參數(shù){name}') a = Person() a('nbnb')
__del__
析構(gòu)魔術(shù)方法
如何觸發(fā):當對象沒有用(沒有任何變量引用)的時候觸發(fā)
參數(shù):一個self
返回值:無
作用:使用完對象是回收資源
注意:del不一定會觸發(fā)當前方法,只有當前對象沒有任何變量接收時才會觸發(fā)
class Person: def __init__(self,name): self.name = name def __del__(self): pass a = Person('lisi') b = a print(b.name) b.name = 'wangwu' print(a.name)
通過del可以刪除某對象對地址的引用。
通過import sys``sys.getrefcount(a)
可以查看對地址的引用次數(shù)。
當代碼全部執(zhí)行結(jié)束的時候,會自動執(zhí)行del方法。
__str__
觸發(fā)時機:當你打印對象名的時候自動觸發(fā),調(diào)用 __str__
里面的內(nèi)容
注意:一定要加返回值,return后面的內(nèi)容就是打印對象看到的內(nèi)容。
class Person: def __init__(self,name): self.name = name # def __str__(self): # return self.name a = Person('lisan') print(a)
當我們直接打印對象的時候,打印出來的是一個地址,這個地址我們是看不懂的,編譯器才看得懂。
想打印對象名,要顯示出準確的東西,就需要 __str__
class Person: def __init__(self,name): self.name = name def __str__(self): return self.name a = Person('lisan') print(a)
總結(jié)
__init__和__str__
這兩個是重點。
__new__
的作用:開辟空間
__del__
的作用:沒有指針引用的時候會調(diào)用,一般是不需要重寫的
__call__
的作用:想不想讓對象當函數(shù)用。
到此這篇關(guān)于Python魔術(shù)方法深入分析講解的文章就介紹到這了,更多相關(guān)Python魔術(shù)方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python TF-IDF算法實現(xiàn)文本關(guān)鍵詞提取
這篇文章主要為大家詳細介紹了python TF-IDF算法實現(xiàn)文本關(guān)鍵詞提取,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-05-05python3整數(shù)反轉(zhuǎn)的實現(xiàn)方法
這篇文章主要介紹了python3整數(shù)反轉(zhuǎn)的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Python?調(diào)用函數(shù)時檢查參數(shù)的類型是否合規(guī)的實現(xiàn)代碼
這篇文章主要介紹了Python?調(diào)用函數(shù)時檢查參數(shù)的類型是否合規(guī)的實現(xiàn)代碼,本文給大家講解的非常詳細,需要的朋友可以參考下2024-06-06聊聊PyTorch中eval和no_grad的關(guān)系
這篇文章主要介紹了聊聊PyTorch中eval和no_grad的關(guān)系,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-05-05Python 給定的經(jīng)緯度標注在地圖上的實現(xiàn)方法
今天小編就為大家分享一篇Python 給定的經(jīng)緯度標注在地圖上的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07