@Staticmethod、@Classmethod和@Property類裝飾器
@staticmethod 與 @classmethod在Python中稱為 裝飾器,用來修飾函數(shù),相當(dāng)于添加一個額外的功能,不再像普通函數(shù)那樣進行實例化。
@staticmethod和@classmethod
其實@staticmethod和@classmethod都是用來聲明靜態(tài)方法的。只不過一個聲明靜態(tài)方法,一個聲明類方法。
靜態(tài)方法:使用裝飾器@staticmethod。沒有self和cls參數(shù)。
類方法:使用裝飾器@classmethod。第一個參數(shù)為當(dāng)前類的對象,通常為cls。
為了方便大家了解兩者的差別,以下的示例代碼將有助于發(fā)現(xiàn)其中的差別:
- '''
 - @Author:Runsen
 - @微信公眾號:Python之王
 - @博客:https://blog.csdn.net/weixin_44510615
 - @Date:2020/8/30
 - '''
 - class A():
 - # 類的屬性
 - x = 1
 - @classmethod
 - def get_name(cls, name):
 - print(cls.x)
 - print('my name is %s' % name)
 - @staticmethod
 - def get_age(age):
 - print(A.x)
 - print(f'i am %s years old' % age)
 - if __name__ == '__main__':
 - A.get_name('Runsen')
 - A.get_age(20)
 - # 實例對象同樣運行
 - a = A()
 - a.get_name('Runsen')
 - a.get_age(20)
 - #輸出如下
 - 1
 - my name is Runsen
 - 1
 - i am 20 years old
 - 1
 - my name is Runsen
 - 1
 - i am 20 years old
 
如果在 @staticmethod 中要調(diào)用到這個類的一些屬性方法,只能直接 類名.屬性名或 類名.方法名。而 @classmethod 因為持有cls參數(shù),可以通過cls來調(diào)用類的屬性,類的方法,實例化對象等,避免硬編碼。
@property
@property可以將一個方法的調(diào)用變成屬性調(diào)用。舉例說明:平時我們調(diào)用數(shù)據(jù)屬性和方法,是這樣的
- class School():
 - name = "家里蹲大學(xué)"
 - def test(self):
 - print("實例方法")
 - @property
 - def test_pro(self):
 - print("靜態(tài)屬性")
 - if __name__ == "__main__":
 - s = School()
 - print(s.name)
 - s.test()
 - # 輸出如下
 - 家里蹲大學(xué)
 - 實例方法
 
這時就要用到@preperty裝飾器,該裝飾器能夠讓一個方法變成屬性調(diào)用。
- class School():
 - name = "家里蹲大學(xué)"
 - def test(self):
 - print("實例方法")
 - @property
 - def test_pro(self):
 - print("靜態(tài)屬性")
 - if __name__ == "__main__":
 - s = School()
 - print(s.name)
 - # 注意返回的函數(shù) 千萬別加()
 - s.test_pro
 - # 輸出如下
 - 家里蹲大學(xué)
 - 靜態(tài)屬性
 
從今天以后,在Python編程中,@property廣泛應(yīng)用在Python類的定義中非常常見。你一看到@property,第一反應(yīng)就是:@property專門負責(zé)把一個方法變成同名屬性的。
本文已收錄 GitHub,傳送門~[1] ,里面更有大廠面試完整考點,歡迎 Star。
Reference
[1]傳送門~:
https://github.com/MaoliRUNsen/runsenlearnpy100















 
 
 








 
 
 
 