教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

什么是不可變類?

更新時(shí)間:2023年03月13日13時(shí)57分 來源:傳智教育 瀏覽次數(shù):

好口碑IT培訓(xùn)

  不可變類是指一旦創(chuàng)建對(duì)象后,其狀態(tài)(屬性值)就不能被修改的類。這意味著,不可變類的對(duì)象是不可變的,無法被修改。

  在Python中,可以通過將類的屬性設(shè)置為只讀來創(chuàng)建不可變類。一種簡(jiǎn)單的方法是使用namedtuple,它是一個(gè)工廠函數(shù),用于創(chuàng)建具有固定字段的類。

  以下是Python不可變類的一些應(yīng)用:

  1.字典的鍵

  由于不可變類的實(shí)例對(duì)象不能被修改,因此它們可以用作字典的鍵。字典中的鍵必須是不可變的,因?yàn)槿绻I是可變的,則在更改鍵時(shí)可能會(huì)導(dǎo)致字典中的哈希值發(fā)生變化,從而導(dǎo)致不可預(yù)測(cè)的行為。

  2.函數(shù)參數(shù)

  在編寫函數(shù)時(shí),如果要使用不可變對(duì)象作為參數(shù),則可以確保在函數(shù)執(zhí)行期間不會(huì)更改對(duì)象的值,從而避免出現(xiàn)不必要的副作用。

  3.緩存對(duì)象

  不可變類的實(shí)例對(duì)象在內(nèi)存中只存在一個(gè)實(shí)例,因此可以用于緩存對(duì)象,以避免在程序中創(chuàng)建大量相同的對(duì)象。

  4.線程安全

  由于不可變類的實(shí)例對(duì)象不能被修改,因此它們?cè)诙嗑€程環(huán)境中是線程安全的,不需要進(jìn)行額外的同步操作。

  5.哈希表中的元素

  由于不可變類的實(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異常。

0 分享到:
和我們?cè)诰€交談!