類屬性 定義在類裡面,方法外面的屬性,一般屬於這個類,如下麵的 num 就是類屬性: 類屬性用 實例.類屬性 或者 類.類屬性 都可以訪問, 如 a = Test() 用 a.num 可以訪問 ,但是如果這個實例有一個實例屬性 self.num 那麼這樣訪問的其實是 self.num , 所以一般用 ...
類屬性 定義在類裡面,方法外面的屬性,一般屬於這個類,如下麵的 num 就是類屬性:
class Test: num = 0
類屬性用 實例.類屬性 或者 類.類屬性 都可以訪問,
如 a = Test() 用 a.num 可以訪問 ,但是如果這個實例有一個實例屬性 self.num 那麼這樣訪問的其實是 self.num ,
所以一般用 類.屬性 即這樣 Test.num 訪問
類方法, 類方法是屬於這個類的方法,定義方式為 前面加上裝飾器 @classmethod 且第一個參數傳遞的是當前類的名字,和self 差不多,只不過一般用 cls 來表示 :
class Test: num = 0 @classmethod def setNum(cls, newNum): cls.num = newNum
這個 setNum 方法就是類方法,可以通過調用 Test.setNum(100) 這種方式來把類屬性 num 的值改為 100
當然也可以通過 實例.setNum(100) 來調用,但是如果有個實例方法也是test這個名字,那麼調用的將會是實例方法而不是類方法.
靜態方法:如果一個方法,和類屬性實例屬性類方法實例方法都沒有什麼關係,如 只是列印一句話,那麼可以把他作為一個靜態方法,前面需要加上裝飾器 @staticmethod :
class Test: @staticmethod def printInfo(): print('this is a staticmethod')
這個靜態方法和類方法一樣,可以用實例調用也可以用類調用,但是一般用 類.靜態方法 調用,因為如果有相同名字的實例方法,也是優先調用實例方法.