1. 靜態(tài)字段(類變量
) 普通字段(成員變量
)
class BasePoint:
count = 0
def __init__(self,x):
self.x = x
其中count就是靜態(tài)字段患亿,而x是普通字段传蹈,普通字段只能通過 實例對象 訪問
靜態(tài)字段可以通過類名訪問押逼,也可以通過實例訪問
class BasePoint:
count = 0
def __init__(self,x):
self.x = x
b1 = BasePoint(1)
b2 = BasePoint(2) # 此時兩者的count = 0
b1.count = 1 # 此時b1的count = 1 .b2 的count沒變還是0
# 分界線演示
BasePoint.count = 999 # 此時b1.count沒變,因為b1.count的值已經(jīng)重寫惦界,不會找BasePoint
# 但是b2.count未重寫挑格,它的值需要找BasePoint也就是999
#分界線演示
# 此時再刪除b1.count,print(b1.count)時會找父類,也就是999
del b1.count
可以從類的觀點上解釋靜態(tài)字段(類變量)
:類繼承
- 將實例看作是父類的子類沾歪,父類中有
類變量
漂彤,所以在子類中也可以得到類變量
的值,實例修改值灾搏,就相當于子類重寫挫望,刪除值就是把重寫刪除,調(diào)用值的時候還是去父類中找狂窑;父類修改值時媳板,沒有這個屬性的子類,值跟著修改泉哈,重寫過子類的屬性的值不變蛉幸,若此時再將子類的屬性刪除,它還是會去父類中找旨巷。 上面代碼??
2. 靜態(tài)方法 類方法 實例方法
實例方法 ----它是實例的方法
- 其中最常用的時實例方法巨缘,通過創(chuàng)建類的實例來調(diào)用這個方法添忘,在定義時必須傳入self參數(shù)采呐,表示調(diào)用當前方法的實例。
靜態(tài)方法
靜態(tài)方法: 某個方法跟這個類有關(guān)系搁骑,但是不會用到類中的屬性方法斧吐,它的定義可以不傳入?yún)?shù)。
但其實python中并不存在真正的靜態(tài)方法仲器,因為在python中所有都是對象煤率,類也是對象的實例,就可以把這個方法作為類的成員乏冀。
類方法 -----它是類相關(guān)的方法
- 在定義時要傳入cls參蝶糯,表示當前類,在類方法中可以調(diào)用類屬性辆沦,不能調(diào)用實例屬性和方法
- 類方法和靜態(tài)方法在應用上有相似之處昼捍,只不過類方法可以通過傳入的cls參數(shù)調(diào)用此類中的靜態(tài)屬性,而且在返回的時候可以知道是子類可調(diào)用的此方法還是父類調(diào)用的此方法肢扯。
- 類方法是不純粹的妒茬,靜態(tài)方法是純粹的,靜態(tài)方法為了代碼的簡潔留在了關(guān)聯(lián)的類中蔚晨,類方法和類的關(guān)聯(lián)性更大一些乍钻。他們都不在實例中運行,是類的方法,不是實例的方法银择。