真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python的__Init__和__New__有什么區(qū)別

這篇文章主要講解了“Python的__Init__ 和__New__有什么區(qū)別”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Python的__Init__ 和__New__有什么區(qū)別”吧!

成都創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)費(fèi)縣,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢建站服務(wù):13518219792

簡(jiǎn)述__init__

__init__(self): 這個(gè)方法我們相對(duì)較熟悉,他是python 類(lèi)中默認(rèn)的初始化方法,即一個(gè)類(lèi)實(shí)例化時(shí),就會(huì)執(zhí)行的方法。

詳解__new__

__new__ 方法重寫(xiě)非常固定,通常如下:

def __new__(cls):
return super().__new__(cls)

其中cls 代表類(lèi)本身。

重寫(xiě)__new__方法的代碼非常固定:重寫(xiě)__new__方法一定要return super().__new__(cls),或者return object.__new__(cls)否則python解釋器會(huì)得不到分配了空間的對(duì)象引用,就不會(huì)調(diào)用對(duì)象的初始化方法。例如:

class Mycls:
def __new__(cls):
 print('new')
 return super().__new__(cls)
def __init__(self):
print('init')
my=Mycls()

輸出:

  • new

  • init

我們可以看到new 在init之前輸出,證明__new__(cls)在__init__(self)之前執(zhí)行。

我們重寫(xiě)代碼:

def __new__(cls):
 print('new')
my=Mycls()
print(my)

輸出:

  • new

  • None

可以看到如果__new__(cls):中沒(méi)有返回值,不會(huì)返回實(shí)例,__init__(self)將不會(huì)執(zhí)行。

__new__和__init__總結(jié)

1.__new__()方法用于創(chuàng)建實(shí)例,類(lèi)實(shí)例化之前會(huì)首先調(diào)用,它是class的方法,是個(gè)靜態(tài)方法。而__init__()方法用戶初始化實(shí)例,該方法用在實(shí)例對(duì)象創(chuàng)建后被調(diào)用,它是實(shí)例對(duì)象的方法,用于設(shè)置類(lèi)實(shí)例對(duì)象的一些初始值。

2.如果類(lèi)中同時(shí)出現(xiàn)了__init__()方法和__new__()方法,則先調(diào)用__new__()方法后調(diào)用__init__()方法。__new__()方法是創(chuàng)建實(shí)例的第一步,執(zhí)行完了需要返回創(chuàng)建的類(lèi)的實(shí)例,否則則報(bào)錯(cuò),無(wú)法執(zhí)行__init__()方法。其中,__init__()方法將不返回任何信息。

__new__的應(yīng)用

有的同學(xué)會(huì)問(wèn) 用__new__來(lái)實(shí)現(xiàn)什么東東呢?

個(gè)人覺(jué)得,單例就是一個(gè)最經(jīng)典的應(yīng)用。單例模式(Singleton Pattern)是一種常用的軟件設(shè)計(jì)模式,該模式的主要目的是確保某一個(gè)類(lèi)只有一個(gè)實(shí)例存在。當(dāng)我們希望在整個(gè)系統(tǒng)中,某個(gè)類(lèi)只能出現(xiàn)一個(gè)實(shí)例時(shí),單例對(duì)象就能派上用場(chǎng)。例如,一個(gè)系統(tǒng)中可以存在多個(gè)打印任務(wù),但是只能有一個(gè)正在工作的任務(wù);一個(gè)系統(tǒng)只能有一個(gè)窗口管理器或文件系統(tǒng);一個(gè)系統(tǒng)只能有一個(gè)計(jì)時(shí)工具或ID(序號(hào))生成器。

具體實(shí)現(xiàn)代碼如下:

class Mycls:
_instance = None
 def __new__(cls):
 # 判斷該類(lèi)的屬性是否為空;對(duì)第一個(gè)對(duì)象沒(méi)有被創(chuàng)建,我們應(yīng)該調(diào)用父類(lèi)的方法,為第一個(gè)對(duì)象分配空間
 if cls._instance == None:
 # 把類(lèi)屬性中保存的對(duì)象引用返回給python的解釋器
cls._instance = object.__new__(cls)
return cls._instance
# 如果cls._instance不為None,直接返回已經(jīng)實(shí)例化了的實(shí)例對(duì)象
else:
return cls._instance
def __init__(self):
print('init')
my1=Mycls()
print(my1)
my2=Mycls()
print(my2)

輸出:

initInit

可以看到雖然叫my1 和my2,但是他們都是對(duì)象0x000000406E471148,這就是單例模式的應(yīng)用。

感謝各位的閱讀,以上就是“Python的__Init__ 和__New__有什么區(qū)別”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Python的__Init__ 和__New__有什么區(qū)別這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


分享標(biāo)題:Python的__Init__和__New__有什么區(qū)別
分享地址:http://weahome.cn/article/jscgde.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部