自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

@Staticmethod、@Classmethod和@Property類裝飾器

開(kāi)發(fā) 后端
@staticmethod 與 @classmethod在Python中稱為 裝飾器,用來(lái)修飾函數(shù),相當(dāng)于添加一個(gè)額外的功能,不再像普通函數(shù)那樣進(jìn)行實(shí)例化。

[[352589]]

 @staticmethod 與 @classmethod在Python中稱為 裝飾器,用來(lái)修飾函數(shù),相當(dāng)于添加一個(gè)額外的功能,不再像普通函數(shù)那樣進(jìn)行實(shí)例化。

@staticmethod和@classmethod

其實(shí)@staticmethod和@classmethod都是用來(lái)聲明靜態(tài)方法的。只不過(guò)一個(gè)聲明靜態(tài)方法,一個(gè)聲明類方法。

靜態(tài)方法:使用裝飾器@staticmethod。沒(méi)有self和cls參數(shù)。

類方法:使用裝飾器@classmethod。第一個(gè)參數(shù)為當(dāng)前類的對(duì)象,通常為cls。

為了方便大家了解兩者的差別,以下的示例代碼將有助于發(fā)現(xiàn)其中的差別:

  1. ''
  2. @Author:Runsen 
  3. @微信公眾號(hào):Python之王 
  4. @博客:https://blog.csdn.net/weixin_44510615 
  5. @Date:2020/8/30 
  6. ''
  7. class A(): 
  8.     # 類的屬性 
  9.     x = 1 
  10.  
  11.     @classmethod 
  12.     def get_name(cls, name): 
  13.         print(cls.x)   
  14.         print('my name is %s' % name
  15.  
  16.     @staticmethod 
  17.     def get_age(age): 
  18.         print(A.x) 
  19.         print(f'i am %s years old' % age) 
  20.  
  21. if __name__ == '__main__'
  22.     A.get_name('Runsen')   
  23.     A.get_age(20) 
  24.      
  25.     # 實(shí)例對(duì)象同樣運(yùn)行 
  26.     a = A() 
  27.     a.get_name('Runsen'
  28.     a.get_age(20) 
  29.  
  30.      
  31. #輸出如下 
  32. my name is Runsen 
  33. i am 20 years old 
  34. my name is Runsen 
  35. i am 20 years old 

如果在 @staticmethod 中要調(diào)用到這個(gè)類的一些屬性方法,只能直接 類名.屬性名或 類名.方法名。而 @classmethod 因?yàn)槌钟衏ls參數(shù),可以通過(guò)cls來(lái)調(diào)用類的屬性,類的方法,實(shí)例化對(duì)象等,避免硬編碼。

@property

@property可以將一個(gè)方法的調(diào)用變成屬性調(diào)用。舉例說(shuō)明:平時(shí)我們調(diào)用數(shù)據(jù)屬性和方法,是這樣的

  1. class School(): 
  2.     name = "家里蹲大學(xué)" 
  3.  
  4.     def test(self): 
  5.         print("實(shí)例方法"
  6.  
  7.     @property 
  8.     def test_pro(self): 
  9.         print("靜態(tài)屬性"
  10.  
  11. if __name__ == "__main__"
  12.     s = School() 
  13.     print(s.name
  14.     s.test() 
  15.      
  16.  # 輸出如下    
  17.  家里蹲大學(xué) 
  18.  實(shí)例方法 

這時(shí)就要用到@preperty裝飾器,該裝飾器能夠讓一個(gè)方法變成屬性調(diào)用。

  1. class School(): 
  2.     name = "家里蹲大學(xué)" 
  3.  
  4.     def test(self): 
  5.         print("實(shí)例方法"
  6.  
  7.     @property 
  8.     def test_pro(self): 
  9.         print("靜態(tài)屬性"
  10.  
  11. if __name__ == "__main__"
  12.     s = School() 
  13.     print(s.name
  14.     # 注意返回的函數(shù) 千萬(wàn)別加() 
  15.     s.test_pro 
  16.      
  17.  # 輸出如下   
  18.  家里蹲大學(xué) 
  19.  靜態(tài)屬性 

從今天以后,在Python編程中,@property廣泛應(yīng)用在Python類的定義中非常常見(jiàn)。你一看到@property,第一反應(yīng)就是:@property專門負(fù)責(zé)把一個(gè)方法變成同名屬性的。

本文已收錄 GitHub,傳送門~[1] ,里面更有大廠面試完整考點(diǎn),歡迎 Star。

Reference
[1]傳送門~:
https://github.com/MaoliRUNsen/runsenlearnpy100

 

責(zé)任編輯:姜華 來(lái)源: Python之王
相關(guān)推薦

2017-07-20 16:02:27

Python編程

2021-12-27 07:10:26

ClassmethodStaticmetho函數(shù)

2021-04-11 08:21:20

Python@property裝飾器

2024-05-20 09:26:42

Python裝飾器函數(shù)

2025-04-14 08:35:00

Python類裝飾器裝飾器

2021-04-15 15:20:46

PythonProperty裝飾器

2023-02-07 07:47:52

Python裝飾器函數(shù)

2010-02-01 17:50:32

Python裝飾器

2024-02-26 00:00:00

TypeScript裝飾器decorators

2024-06-03 10:26:47

Python裝飾器對(duì)象編程

2022-10-24 07:31:53

Python編程裝飾器

2023-08-07 16:07:42

2016-11-01 09:24:38

Python裝飾器

2022-09-19 23:04:08

Python裝飾器語(yǔ)言

2023-09-04 13:14:00

裝飾器設(shè)計(jì)模式

2022-09-26 09:02:54

TS 裝飾器TypeScript

2023-12-11 15:51:00

Python裝飾器代碼

2024-05-24 11:36:28

Python裝飾器

2017-07-07 17:01:32

裝飾器代碼Python

2021-02-01 14:17:53

裝飾器外層函數(shù)里層函數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)