Python魔術方法深入分析講解
前言
魔術方法就是一個類/對象中的方法,和普通方法唯一的不同是:普通方法需要調(diào)用,而魔術方法是在特定時刻自動觸發(fā)

__init__
初始化魔術方法
初始化魔術方法
如何觸發(fā):初始化對象時觸發(fā)
參數(shù):至少一個self
返回值:無
作用:初始化對象的成員
注:使用這個方式初始化的成員都是寫入對象中的,類中不存在
class Person:
def __init__(self,name):
self.name = name
a = Person('lisan')
print(a.name)

__new__
實例化魔術方法
如何觸發(fā):在實例化對象時觸發(fā)
參數(shù):至少一個cls,接收當前類
返回值:必須返回一個對象實例
作用:實例化對象
注意:實例化對象是Object類底層實現(xiàn),其他類繼承了Object的 __new__才能夠?qū)崿F(xiàn)實例化對象。沒事別碰這個魔術方法,先觸發(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)用對象的魔術方法
如何觸發(fā):將對象當作函數(shù)調(diào)用時觸發(fā)對象()
參數(shù):至少一個self接收對象
返回值:根據(jù)情況而定
作用:可以將復雜的步驟進行合并操作,減少調(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__
析構魔術方法
如何觸發(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í)行結束的時候,會自動執(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)

總結
__init__和__str__這兩個是重點。
__new__的作用:開辟空間
__del__的作用:沒有指針引用的時候會調(diào)用,一般是不需要重寫的
__call__的作用:想不想讓對象當函數(shù)用。
到此這篇關于Python魔術方法深入分析講解的文章就介紹到這了,更多相關Python魔術方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Pandas讀取MySQL數(shù)據(jù)到DataFrame的方法
今天小編就為大家分享一篇Pandas讀取MySQL數(shù)據(jù)到DataFrame的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07
深入討論Python函數(shù)的參數(shù)的默認值所引發(fā)的問題的原因
這篇文章主要介紹了深入討論Python函數(shù)的參數(shù)的默認值所引發(fā)的問題的原因,利用了Python解釋器在內(nèi)存地址分配中的過程解釋了參數(shù)默認值帶來陷阱的原因,需要的朋友可以參考下2015-03-03
簡單介紹一下pyinstaller打包以及安全性的實現(xiàn)
這篇文章主要介紹了簡單介紹一下pyinstaller打包以及安全性的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-06-06
Python中“FileNotFoundError: [Errno 2] No
最近在使用vscode寫代碼(python)時發(fā)現(xiàn)使用相對路徑讀取文件以及寫入文件時,想要直接在當前目錄下讀寫一直提示沒有該文件,需要返回根目錄,所以本文給大家介紹了Python中“FileNotFoundError: [Errno 2] No such file or directory”的解決辦法,需要的朋友可以參考下2025-06-06
Python使用Py2neo創(chuàng)建Neo4j的節(jié)點和關系
Neo4j是一款開源圖數(shù)據(jù)庫,使用Python語言訪問Neo4j可以使用Py2neo。本文介紹了使用Py2neo訪問Neo4j,批量創(chuàng)建節(jié)點和關系的方法2021-08-08

