Python的類別中可以定義類別變數(class variable)和實例變數(instance variable);類別變數的值是跨實例的,而實例變數的值則屬於實例。
下面類別C中定義了兩個類別變數v和c,以及實際變數v,觀察執行結果。
類別變數可以類別名稱.變數名稱來存取,例如C.v或C.c;也可以實例變數.變數名稱來存取,例如c1.c或c2.c。
若類別變數和實例變數名稱相同,則以實例變數.變數名稱會取得實例變數的值,例如c1.v或c2.v。
使用實例變數.變數名稱 = 值設定值時,即使變數名稱為類別變數且無同名的實例變數,實際上是把值設定到新增的實例變數,例如c2.c = 6。
class C:
v = 1 # 類別變數
c = 3 # 類別變數
def __init__(self, v):
self.v = v # 實例變數
# 建立類別C的c1實例變數
c1 = C(2)
# 取得C類別的類別變數v
print(C.v) # 1
# 取得c1實例的實例變數v
print(c1.v) # 2
# 取得c1實例的類別的類別變數c
print(c1.c) # 3
# 建立類別C的c2實例變數
c2 = C(4)
# 取得c2實例的實例變數v
print(c2.v) # 4
# 設定C類別的類別變數c
C.c = 5
# 取得c1實例的類別變數c
print(c1.c) # 5
# 新增/設定c2實例的實例變數c
c2.c = 6
# 取得c2實例的實例變數c
print(c2.c) # 6
# 取得C類別的類別變數c
print(C.c) # 5
# 取得c1實例的類別變數c
print(c1.c) # 5
沒有留言:
張貼留言