成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python 面試高頻問題:__Init__ 和__New__的區(qū)別

開發(fā) 后端
類的內置方法,會在某種條件滿足下自動觸發(fā),這里我們重點講解一下__init__和__new__,他們與實例創(chuàng)建有關。

在Python類內部定義,以_ _ xx _ _ 結尾的方法,都是類的內置方法,也稱之為魔法方法。

類的內置方法,會在某種條件滿足下自動觸發(fā),這里我們重點講解一下__init__和__new__,他們與實例創(chuàng)建有關。

簡述__init__

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

詳解__new__

__new__ 方法重寫非常固定,通常如下:

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

其中cls 代表類本身。

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

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í)行。

我們重寫代碼:

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

輸出:

  • new
  • None

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

__new__和__init__總結

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

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

__new__的應用

有的同學會問 用__new__來實現什么東東呢?

個人覺得,單例就是一個最經典的應用。單例模式(Singleton Pattern)是一種常用的軟件設計模式,該模式的主要目的是確保某一個類只有一個實例存在。當我們希望在整個系統(tǒng)中,某個類只能出現一個實例時,單例對象就能派上用場。例如,一個系統(tǒng)中可以存在多個打印任務,但是只能有一個正在工作的任務;一個系統(tǒng)只能有一個窗口管理器或文件系統(tǒng);一個系統(tǒng)只能有一個計時工具或ID(序號)生成器。

具體實現代碼如下:

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

輸出:

init
<__main__.Mycls object at 0x000000406E471148>
Init
<__main__.Mycls object at 0x000000406E471148>

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

責任編輯:姜華 來源: 今日頭條
相關推薦

2017-07-14 08:14:54

Python函數

2022-07-26 08:07:03

Python淺拷貝深拷貝

2013-07-25 13:15:55

iOS開發(fā)學習new與allocinit區(qū)別

2022-03-17 05:42:05

__init__Python

2021-10-20 07:36:03

Python構造方法

2022-07-13 16:38:32

Python可變數據類型不可變數據類型

2022-06-09 08:17:30

Python__new__

2020-09-15 12:57:56

Golangnewmake

2023-08-02 08:54:58

Java弱引用鏈表

2025-01-14 11:21:35

2023-03-24 08:01:27

Go語言內存

2021-02-23 12:43:39

Redis面試題緩存

2025-03-10 11:40:00

前端開發(fā)HTML

2025-03-10 00:00:00

property?attributeHTML

2020-03-03 17:47:07

UDP TCP面試題

2020-08-31 12:20:07

Python面試題代碼

2011-05-24 16:46:48

mallocfreenew

2019-12-26 09:52:33

Redis集群線程

2025-04-03 09:56:40

Python算法開發(fā)

2023-09-04 07:59:21

Python面試問題
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 羞羞视频网 | xxxxxx国产 | 99久久亚洲 | 亚洲精品精品 | 男女羞羞免费网站 | 日韩三区| 亚洲精品一区二三区不卡 | 国产午夜在线观看 | 97久久精品午夜一区二区 | 国产综合久久 | 一区二区三区国产好 | 超碰在线97国产 | 手机看片1 | 伊人艹 | 国产永久免费 | 欧美激情一区二区三区 | 久久日韩精品一区二区三区 | 中文字幕一区二区三区不卡 | 人人鲁人人莫人人爱精品 | 九色网址 | 日本一区视频在线观看 | 国产精品99久久久久久久久久久久 | japanhd成人| 欧美自拍第一页 | 久久久久国产 | 一级做a爰片性色毛片视频停止 | 国产精品久久久久久吹潮 | 国产福利视频在线观看 | 国产精品99久久久久久www | 国产一区二区在线视频 | 天天综合日日夜夜 | 国产精品综合久久 | 在线精品一区二区 | 精品三区 | 精品国产视频 | 色.com| av网站在线免费观看 | 欧美性猛交一区二区三区精品 | 国产精品a久久久久 | 亚洲精品在线观看视频 | 亚洲欧美日韩在线 |