小編給大家分享一下python類變量和實(shí)例變量的案例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
我們知道,無(wú)論是在類中定義的屬性還是方法,在類的外部,都無(wú)法直接調(diào)用它們,因此,我們完全可以把類看做是一個(gè)獨(dú)立的作用域(稱為類命名空間),則類屬性其實(shí)就是定義在類命名空間內(nèi)的變量(類方法其實(shí)就是定義的類命名空間中的函數(shù))。
根據(jù)定義屬性的位置不同,類屬性又可細(xì)分為類屬性(后續(xù)用類變量表示)和實(shí)例屬性(后續(xù)用實(shí)例變量表示)。
類變量(類屬性)
類變量指的是定義在類中,但在各個(gè)類方法外的變量。類變量的特點(diǎn)是:所有類的實(shí)例化對(duì)象都可以共享類變量的值,即類變量可以在所有實(shí)例化對(duì)象中作為公用資源。
注意,類變量推薦直接用類名訪問(wèn),但也可以使用對(duì)象名訪問(wèn)。
例如,下面代碼定義了一個(gè) Address 類,并為該類定義了多個(gè)類屬性:
class Address : detail = '廣州' post_code = '510660' def info (self): # 嘗試直接訪問(wèn)類變量 #print(detail) # 報(bào)錯(cuò) # 通過(guò)類來(lái)訪問(wèn)類變量 print(Address.detail) # 輸出 廣州 print(Address.post_code) # 輸出 510660 #創(chuàng)建 2 個(gè)類對(duì)象 addr1 = Address() addr1.info() addr2 = Address() addr2.info() # 修改Address類的類變量 Address.detail = '佛山' Address.post_code = '460110' addr1.info() addr2.info()
該程序中,第二、三行代碼為 Address 定義了兩個(gè)類變量。當(dāng)程序中第一次調(diào)用 Address 對(duì)象的 info() 方法輸出兩個(gè)類變量時(shí),將會(huì)輸出這兩個(gè)類變量的初始值。接下來(lái)程序通過(guò) Address 類修改了兩個(gè)類變量的值,因此當(dāng)程序第二次通過(guò) info() 方法輸出兩個(gè)類變量時(shí),將會(huì)輸出這兩個(gè)類變量修改之后的值。
運(yùn)行上面代碼,將會(huì)看到如下輸出結(jié)果:
廣州 510660 廣州 510660 佛山 460110 佛山 460110
通過(guò)輸出結(jié)果可以看到,addr1 和 addr2 共享類變量,換句話說(shuō),改變類變量的值會(huì)作用于該類所有的實(shí)例化對(duì)象。
實(shí)例變量指的是定義在類的方法中的屬性,它的特點(diǎn)是:只作用于調(diào)用方法的對(duì)象。
注意,實(shí)例變量只能通過(guò)對(duì)象名訪問(wèn),無(wú)法通過(guò)類名直接訪問(wèn)。
Python 允許通過(guò)對(duì)象訪問(wèn)類變量,但無(wú)法通過(guò)對(duì)象修改類變量的值。因?yàn)椋ㄟ^(guò)對(duì)象修改類變量的值,不是在給“類變量賦值”,而是定義新的實(shí)例變量。
例如如下程序:
class Inventory: # 定義兩個(gè)類變量 item = '鼠標(biāo)' quantity = 2000 # 定義實(shí)例方法 def change(self, item, quantity): # 下面賦值語(yǔ)句不是對(duì)類變量賦值,而是定義新的實(shí)例變量 self.item = item self.quantity = quantity # 創(chuàng)建Inventory對(duì)象 iv = Inventory() iv.change('顯示器', 500) # 訪問(wèn)iv的item和quantity實(shí)例變量 print(iv.item) # 顯示器 print(iv.quantity) # 500 # 訪問(wèn)Inventory的item和quantity類變量 print(Inventory.item) # 鼠標(biāo) print(Inventory.quantity) # 2000
上面程序中,第 8、9 行代碼通過(guò)實(shí)例對(duì) item、quantity 變量賦值,看上去很像是對(duì)類變量賦值,但并不是,它們的作用是:重新定義了兩個(gè)實(shí)例變量。
類中,實(shí)例變量和類變量可以同名,但是在這種情況下,使用類對(duì)象將無(wú)法調(diào)用類變量,因?yàn)樗鼤?huì)選實(shí)例變量,因此這也是不推薦“類變量使用對(duì)象名調(diào)用”的原因。
上面程序在調(diào)用 Inventory 對(duì)象的 change() 方法之后,訪問(wèn) Inventory 對(duì)象的 item、quantity 變量,由于該對(duì)象本身己有這兩個(gè)實(shí)例變量,因此程序?qū)?huì)輸出該對(duì)象的實(shí)例變量的值;接下來(lái)程序通過(guò) Inventory 訪問(wèn)它的 item、quantity 兩個(gè)類變量,此時(shí)才是真的訪問(wèn)類變量。
運(yùn)行上面程序,將看到如下輸出結(jié)果:
顯示器 500 鼠標(biāo) 2000
以上是python類變量和實(shí)例變量的案例分析的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站制作公司行業(yè)資訊頻道!
名稱欄目:python類變量和實(shí)例變量的案例分析-創(chuàng)新互聯(lián)
當(dāng)前地址:http://aaarwkj.com/article6/godog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、商城網(wǎng)站、網(wǎng)站排名、微信小程序、企業(yè)網(wǎng)站制作、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容