溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python類變量和實例變量的案例分析

發(fā)布時間:2020-10-22 15:23:59 來源:億速云 閱讀:165 作者:小新 欄目:編程語言

小編給大家分享一下python類變量和實例變量的案例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

我們知道,無論是在類中定義的屬性還是方法,在類的外部,都無法直接調(diào)用它們,因此,我們完全可以把類看做是一個獨立的作用域(稱為類命名空間),則類屬性其實就是定義在類命名空間內(nèi)的變量(類方法其實就是定義的類命名空間中的函數(shù))。

根據(jù)定義屬性的位置不同,類屬性又可細(xì)分為類屬性(后續(xù)用類變量表示)和實例屬性(后續(xù)用實例變量表示)。

類變量(類屬性)    

類變量指的是定義在類中,但在各個類方法外的變量。類變量的特點是:所有類的實例化對象都可以共享類變量的值,即類變量可以在所有實例化對象中作為公用資源。

注意,類變量推薦直接用類名訪問,但也可以使用對象名訪問。

例如,下面代碼定義了一個 Address 類,并為該類定義了多個類屬性:

class Address :
    detail = '廣州'
    post_code = '510660'
    def info (self):
        # 嘗試直接訪問類變量
        #print(detail) # 報錯
        # 通過類來訪問類變量
        print(Address.detail) # 輸出 廣州
        print(Address.post_code) # 輸出 510660
#創(chuàng)建 2 個類對象
addr1 = Address()
addr1.info()
addr2 = Address()
addr2.info()
# 修改Address類的類變量
Address.detail = '佛山'
Address.post_code = '460110'
addr1.info()
addr2.info()

該程序中,第二、三行代碼為 Address 定義了兩個類變量。當(dāng)程序中第一次調(diào)用 Address 對象的 info() 方法輸出兩個類變量時,將會輸出這兩個類變量的初始值。接下來程序通過 Address 類修改了兩個類變量的值,因此當(dāng)程序第二次通過 info() 方法輸出兩個類變量時,將會輸出這兩個類變量修改之后的值。

運行上面代碼,將會看到如下輸出結(jié)果:

廣州
510660
廣州
510660
佛山
460110
佛山
460110

通過輸出結(jié)果可以看到,addr1 和 addr2 共享類變量,換句話說,改變類變量的值會作用于該類所有的實例化對象。

實例變量指的是定義在類的方法中的屬性,它的特點是:只作用于調(diào)用方法的對象。

注意,實例變量只能通過對象名訪問,無法通過類名直接訪問。

Python 允許通過對象訪問類變量,但無法通過對象修改類變量的值。因為,通過對象修改類變量的值,不是在給“類變量賦值”,而是定義新的實例變量。

例如如下程序:

class Inventory:
    # 定義兩個類變量
    item = '鼠標(biāo)'
    quantity = 2000
    # 定義實例方法
    def change(self, item, quantity):
        # 下面賦值語句不是對類變量賦值,而是定義新的實例變量
        self.item = item
        self.quantity = quantity
# 創(chuàng)建Inventory對象
iv = Inventory()
iv.change('顯示器', 500)
# 訪問iv的item和quantity實例變量
print(iv.item) # 顯示器
print(iv.quantity) # 500
# 訪問Inventory的item和quantity類變量
print(Inventory.item) # 鼠標(biāo)
print(Inventory.quantity) # 2000

上面程序中,第 8、9 行代碼通過實例對 item、quantity 變量賦值,看上去很像是對類變量賦值,但并不是,它們的作用是:重新定義了兩個實例變量。

類中,實例變量和類變量可以同名,但是在這種情況下,使用類對象將無法調(diào)用類變量,因為它會首選實例變量,因此這也是不推薦“類變量使用對象名調(diào)用”的原因。

上面程序在調(diào)用 Inventory 對象的 change() 方法之后,訪問 Inventory 對象的 item、quantity 變量,由于該對象本身己有這兩個實例變量,因此程序?qū)敵鲈搶ο蟮膶嵗兞康闹担唤酉聛沓绦蛲ㄟ^ Inventory 訪問它的 item、quantity 兩個類變量,此時才是真的訪問類變量。

運行上面程序,將看到如下輸出結(jié)果:

顯示器
500
鼠標(biāo)
2000

以上是python類變量和實例變量的案例分析的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI