這篇文章主要講解了“怎么使用@Staticmethod、@Classmethod和@Property類裝飾器”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“怎么使用@Staticmethod、@Classmethod和@Property類裝飾器”吧!
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到平邑網(wǎng)站設(shè)計(jì)與平邑網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋平邑地區(qū)。
@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)其中的差別:
''' @Author:Runsen @微信公眾號(hào):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) # 實(shí)例對(duì)象同樣運(yùn)行 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)用到這個(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ù)屬性和方法,是這樣的
class School(): name = "家里蹲大學(xué)" def test(self): print("實(shí)例方法") @property def test_pro(self): print("靜態(tài)屬性") if __name__ == "__main__": s = School() print(s.name) s.test() # 輸出如下 家里蹲大學(xué) 實(shí)例方法
這時(shí)就要用到@preperty裝飾器,該裝飾器能夠讓一個(gè)方法變成屬性調(diào)用。
class School(): name = "家里蹲大學(xué)" def test(self): print("實(shí)例方法") @property def test_pro(self): print("靜態(tài)屬性") if __name__ == "__main__": s = School() print(s.name) # 注意返回的函數(shù) 千萬(wàn)別加() s.test_pro # 輸出如下 家里蹲大學(xué) 靜態(tài)屬性
從今天以后,在Python編程中,@property廣泛應(yīng)用在Python類的定義中非常常見(jiàn)。你一看到@property,第一反應(yīng)就是:@property專門負(fù)責(zé)把一個(gè)方法變成同名屬性的。
感謝各位的閱讀,以上就是“怎么使用@Staticmethod、@Classmethod和@Property類裝飾器”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)怎么使用@Staticmethod、@Classmethod和@Property類裝飾器這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!