更新時(shí)間:2023年03月13日13時(shí)57分 來源:傳智教育 瀏覽次數(shù):
不可變類是指一旦創(chuàng)建對(duì)象后,其狀態(tài)(屬性值)就不能被修改的類。這意味著,不可變類的對(duì)象是不可變的,無法被修改。
在Python中,可以通過將類的屬性設(shè)置為只讀來創(chuàng)建不可變類。一種簡(jiǎn)單的方法是使用namedtuple,它是一個(gè)工廠函數(shù),用于創(chuàng)建具有固定字段的類。
以下是Python不可變類的一些應(yīng)用:
由于不可變類的實(shí)例對(duì)象不能被修改,因此它們可以用作字典的鍵。字典中的鍵必須是不可變的,因?yàn)槿绻I是可變的,則在更改鍵時(shí)可能會(huì)導(dǎo)致字典中的哈希值發(fā)生變化,從而導(dǎo)致不可預(yù)測(cè)的行為。
在編寫函數(shù)時(shí),如果要使用不可變對(duì)象作為參數(shù),則可以確保在函數(shù)執(zhí)行期間不會(huì)更改對(duì)象的值,從而避免出現(xiàn)不必要的副作用。
不可變類的實(shí)例對(duì)象在內(nèi)存中只存在一個(gè)實(shí)例,因此可以用于緩存對(duì)象,以避免在程序中創(chuàng)建大量相同的對(duì)象。
由于不可變類的實(shí)例對(duì)象不能被修改,因此它們?cè)诙嗑€程環(huán)境中是線程安全的,不需要進(jìn)行額外的同步操作。
由于不可變類的實(shí)例對(duì)象具有唯一的哈希值,因此它們可以用作哈希表中的元素,例如集合(frozenset)、字典等。
以下是一個(gè)示例代碼,演示如何使用namedtuple創(chuàng)建一個(gè)不可變類:
from collections import namedtuple # 創(chuàng)建一個(gè)名為Person的namedtuple類,它有兩個(gè)字段:name和age Person = namedtuple('Person', ['name', 'age']) # 創(chuàng)建一個(gè)Person對(duì)象,并傳遞其name和age person1 = Person(name='Alice', age=25) # 不能修改Person對(duì)象的屬性值 person1.age = 30 # 報(bào)錯(cuò),因?yàn)镻erson是不可變類
在上面的示例中,我們創(chuàng)建了一個(gè)名為Person的namedtuple類,并使用其創(chuàng)建了一個(gè)Person對(duì)象。由于Person是不可變類,所以我們不能修改其屬性值。如果嘗試修改屬性值,Python會(huì)引發(fā)AttributeError異常。
北京校區(qū)