Python – instance attribute & class attribute

Loading

測試環境為 CentOS 8 x86_64 (虛擬機)

Class 的 屬性 (Attribute)是用來存放 Object 的資料.屬性 (Attribute) 有分 實例屬性(instance attribute) 與 類別屬性(class attribute).

  • 實例屬性 (instance attribute) 又稱 資料屬性 (data attribute)
    instance attribute 就是跟著 instance 建立時生成,每一個 instance 的 instance attribute 都是獨立的,修改時不影響其他 instance 的 instance attribute.
  • 類別屬性 (class attribute)
    class attribute 並不隨著 instance 建立時生成,所有 instance 共用相同的 class attribute ,當有 instance 修改 class attribute 時其他 instance 存取 class attribute 時都會受影響.

範例如下.

[root@localhost ~]# vi computer.py
# Class
class computer:
    # class attribute
    cpu='Intel'
    def __init__(self):
        # instance attribute
        self.disk = '256G'

    # Method
    def list(self):
        return self.disk
 
#object
customer1=computer()
customer2=computer()

customer2.disk='512G'
print ('Computer1:' , customer1.cpu , ' , ' ,customer1.disk)
print ('Computer2:' , customer2.cpu , ' , ' ,customer2.disk)

computer.cpu='AMD'
print ('Computer1:' , customer1.cpu , ' , ' ,customer1.disk)
print ('Computer2:' , customer2.cpu , ' , ' ,customer2.disk)

執行結果.

[root@localhost ~]# python3 computer.py 
Computer1: Intel  ,  256G
Computer2: Intel  ,  512G
Computer1: AMD  ,  256G
Computer2: AMD  ,  512G
  • 實例屬性 (instance attribute) 又稱 資料屬性 (data attribute)
    範例中我們先建立了 customer2 物件並透過物件的 disk 屬性變更了屬性值.

    customer2.disk='512G'
    print ('Computer1:' , customer1.cpu , ' , ' ,customer1.disk)
    print ('Computer2:' , customer2.cpu , ' , ' ,customer2.disk)
    

    執行結果.只有 customer2 的 disk 屬性質變更了.

    Computer1: Intel  ,  256G
    Computer2: Intel  ,  512G
    
  • 類別屬性 (class attribute)
    範例中我直接透過 類別名稱變更了屬性值.

    computer.cpu='AMD'
    print ('Computer1:' , customer1.cpu , ' , ' ,customer1.disk)
    print ('Computer2:' , customer2.cpu , ' , ' ,customer2.disk)
    

    執行結果.customer1 與 customer2 的 cpu 屬性質皆變更了.

    Computer1: AMD  ,  256G
    Computer2: AMD  ,  512G
    
沒有解決問題,試試搜尋本站其他內容

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料