日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

深入了解Python 方法之類方法 & 靜態(tài)方法

瀏覽:226日期:2022-07-13 16:50:26

寫在之前

這幾天的閱讀量蜜汁低,是什么原因我也沒搞清楚,如果你們覺得我哪里寫的有問題,或者是哪里不好,歡迎后臺或者微信告知我,先行謝過。

昨天的文章 詳解類方法之綁定方法與非綁定方法 中寫了方法中的綁定方法和非綁定方法,今天我們繼續(xù)來學習剩下的「類方法」和「靜態(tài)方法」。

類方法 & 靜態(tài)方法

在開始之前,先讓我們來看下面一段代碼:

class Sample: language = 'C++' def __init__(self): self.language = 'python'def get_class_attr(cls): return cls.languageif __name__ == '__main__': print('sample.language:',Sample.language) r = get_class_attr(Sample) print('get class attribute:',r) f = Sample() print('instance attribute:',f.language)

上述代碼在類 Sample 中,定義了一個屬性 language = “C++”,這個是「類屬性」;在初始化方法中,又定義了 self.language = “python”,這個是「實例屬性」。

知道了這個,我們然后來分析一下函數 get_class_attr(cls),在這個函數中參數用的是 cls,從函數體來看,要求它引用的對象應該具有屬性 language,這說明,不是隨隨便便哪個對象都可以。很巧的是在前面定義的類 Sample 中就有 language 這個屬性,于是在調用這個函數的時候,就直接將該類對象作為方法 get_class_attr() 的參數。

Sample.language 是要得到類屬性的值,get_class_attr(Sample) 所返回的就是類 Sample 的屬性 Sample.language 的值,所以對于上述例子來說,前面兩個 print() 函數打印的結果應該是一樣的。

f = Sample() 則是創(chuàng)建了一個實例,然后通過 f.language 訪問實例屬性。所以對于上述的代碼的運行結果如下所示:

sample.language:C++get class attribute:C++instance attribute:python

不知道經過我上述的解釋你是否明白了,如果沒明白,建議你再仔細對比一下上述的運行結果和分析的過程。

在上述的例子中,比較特殊的函數應該是 get_class_attr(cls),它是寫在類的外面的,然而這個函數又只能調用前面寫的那個類對象,因為不是所有對象都有那個特別的 language 屬性,這種函數寫在外面不利于后期的維護,我們應該避免這種情況的發(fā)生,而避免的方法就是把函數和類寫在一起,所以就有了下面這種寫法:

class sample: language = 'C++' def __init__(self): self.language = 'python' @classmethod def get_class_attr(cls): return cls.languageif __name__ == '__main__': print('sample.language:',sample.language) r = sample.get_class_attr() print('get class attribute:',r) f = sample() print('instance attribute:',f.language) print('instance get_class_str:',f.get_class_attr())

在上面這個修改的代碼中,出現(xiàn)了 @classmethod,這是一個裝飾器,我們在函數的那部分講到過。這里需要我們注意的是,@classmethod 所裝飾的方法的參數中,第一個參數不是 self,這個和我們常規(guī)認識中的類的方法有所區(qū)別。這里使用了參數 cls,這是習慣的寫法,當然用其它的也可以。讓我們來看一下運行的結果:

sample.language:C++get class attribute:C++instance attribute:pythoninstance get_class_str:C++

通過上面的運行結果我們可以看到,不管是通過類還是實例來執(zhí)行 get_class_attr() 得到的結果都是類屬性的值,這說明裝飾器 @classmethod 所裝飾的方法,它的參數 cls 引用的對象是類對象 Sample。

至此,「類方法」 的定義就出來了:類方法,就是在類里面定義的方法。該方法由裝飾器 @classmethod 裝飾,其第一個參數 cls 引用的是這個類對象,即將類本身作為作為引用對象傳到這個方法里。

知道了類方法以后,我們可以用同樣的思路理解另一個方法 「靜態(tài)方法」,我們還是先來看一段代碼:

import randomdef judge(n): num = random.randint(1,100) return num - n > 0class Sample: def __init__(self,name): self.name = name def get_name(self,age): if judge(age): return self.name else: return 'the name is stupid'if __name__ == '__main__': s = Sample(’rocky’) name = s.get_name(23) print(name)

先看一下上面的代碼,類 Sample 里面使用了外面的函數 judge(n),這種類和函數的關系也是因為相互關聯(lián),所以后期的程序維護可能會出問題,于是為了便于維護,我們同樣對程序進行了修改:

import randomclass Sample: def __init__(self,name): self.name = name def get_name(self,age): if self.judge(age): return self.name else: return 'the name is stupid' @staticmethod def judge(n): num = random.randint(1,100) return num - n > 0if __name__ == '__main__': s = Sample(’rocky’) name = s.get_name(23) print(name)

同樣是經過修改優(yōu)化,將原來在類外面的函數放到了類里面。但是這不是簡單的移動,還要在函數的前面加上 @staticmethod 裝飾器,并且要注意的是,雖然這個函數在類的里面,但是跟別的方法是不一樣的,它的第一個參數也不是 self,當我們要使用它的時候,可以通過實例調用,比如 self.judge(n),也可以通過類調用這個方法,比如 sample.select(n)。

從上面的程序可以看出,盡管 judge(n) 位于類里面,但它確實一個獨立的方法,與類本身沒有關系,僅僅是為了免除前面所說的后期維護上的麻煩。但是它也有存在的道理,上面的例子就是一個典型的說明。

所以「靜態(tài)方法」的定義也就出來了:在類的作用域里面,前面必須要加上一個 @staticmethod 裝飾器,我們將這種方法命名為靜態(tài)方法。

寫在之后

方法是類的重要組成部分,本章所講的類方法和靜態(tài)方法讓我們在使用類的時候有了更加便利的工具。

「方法」的這一塊到這里就補充完了,之后我們將繼續(xù)學習 OOP 的剩下兩個特征:「多態(tài)」和「封裝」,敬請期待。

如果你覺得本篇文章讓你有所收獲,歡迎點贊轉發(fā),你的支持是對我碼字最大的動力,分享永遠在路上,我們一起加油。

The end。

以上就是深入了解Python 方法之類方法 & 靜態(tài)方法的詳細內容,更多關于python 類方法和靜態(tài)方法的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩精品永久网址| 在线视频亚洲欧美中文| 国产欧美69| 国产精品www.| 精品国产午夜| 国产精品专区免费| 日韩精品一区二区三区免费观看| 精品国产一区二区三区av片| 国产欧美久久一区二区三区| 麻豆一区二区在线| 国产精品久久久久9999高清| 欧美一区精品| 你懂的国产精品永久在线| 精品三级久久久| av高清一区| 亚洲综合日本| 国产欧美欧美| 在线手机中文字幕| 亚洲调教视频在线观看| 国产偷自视频区视频一区二区| 日本欧美一区二区在线观看| 一区二区三区网站| 蜜桃视频一区二区三区| 国产香蕉精品| 色乱码一区二区三区网站| 999视频精品| 99在线精品免费视频九九视| 亚洲精品在线a| 久久精品福利| 不卡中文字幕| 欧美日韩夜夜| 日韩电影免费网站| 亚洲丝袜美腿一区| 久久精品女人| 午夜日韩在线| 国产情侣一区| 在线日韩中文| 国产日韩欧美三区| 激情六月综合| 国产精品男女| 亲子伦视频一区二区三区| 丝袜美腿亚洲一区| 精品国产不卡| 丝袜美腿亚洲色图| 97国产成人高清在线观看| 99香蕉国产精品偷在线观看| 国产精品hd| 亚洲欧美高清| 国产成人精品亚洲线观看| 免费一级片91| 福利一区在线| 亚洲1区在线| 日韩高清欧美| 国产欧美日韩一区二区三区四区| 欧美一区精品| 欧洲av不卡| 天堂va在线高清一区| 欧美aa一级| 日韩精品久久理论片| 日本一区二区高清不卡| 最新国产精品| 久久精品91| 国产亚洲电影| 亚洲免费中文| 日本蜜桃在线观看视频| 欧美日韩亚洲一区| 久久亚洲欧美| 999精品在线| 久久影院资源站| 亚洲精品伊人| 亚洲女同中文字幕| 美女精品视频在线| 日日夜夜免费精品| 国产一区91| 久久久国产亚洲精品| 免费在线亚洲欧美| 91精品国产自产精品男人的天堂 | 国产日韩欧美在线播放不卡| 欧美日韩精品免费观看视完整 | 欧美天堂亚洲电影院在线观看| 久久久精品五月天| 日韩午夜视频在线| 午夜电影亚洲| 国产一区二区三区久久 | 亚洲中午字幕| 日韩伦理在线一区| 麻豆一区在线| 日韩不卡一区二区| 水野朝阳av一区二区三区| 欧美成人精品三级网站| 国产欧美激情| 男人的天堂亚洲一区| 久久久久欧美精品| 欧美经典一区| 日韩美女精品| 丝袜a∨在线一区二区三区不卡| 亚洲香蕉久久| 欧美日中文字幕| 美女av一区| 国产精品一线| 久久国产麻豆精品| 欧美视频久久| 国产欧美三级| 亚洲精品第一| 亚洲aa在线| 四虎在线精品| 亚洲专区视频| 一区二区电影在线观看| 欧美日韩国产高清电影| 蜜桃视频在线网站| 国产乱人伦丫前精品视频| 亚洲综合福利| 国产精品一区二区三区www| 免费看的黄色欧美网站| 午夜精品一区二区三区国产| 亚洲调教视频在线观看| 欧美日韩一二三四| 99久久夜色精品国产亚洲狼| 日韩在线欧美| 久久婷婷久久| 91精品亚洲| 欧美+亚洲+精品+三区| 久久亚洲国产| 群体交乱之放荡娇妻一区二区| 国产亚洲福利| 久久在线电影| 亚洲精品2区| 视频在线观看国产精品| 日韩影院精彩在线| 最近国产精品视频| 欧美日韩亚洲一区在线观看| 国产精品最新| 久久精品伊人| 久久一区精品| av最新在线| 日韩av福利| 尤物在线精品| 老司机精品久久| 国产亚洲毛片| 一区二区不卡| 91成人在线网站| 欧美国产视频| 日韩精品91| 国产在线日韩| 久久亚洲色图| 国产日产精品_国产精品毛片| 欧美日韩视频网站| 亚洲成人精品| 蜜桃视频一区二区三区| 亚洲1区在线| 美女视频黄久久| 99视频精品全国免费| 老色鬼久久亚洲一区二区| 日韩国产一区二| 免费在线日韩av| 国产精品字幕| 蜜臀久久久久久久| 欧美激情亚洲| 在线日韩欧美| 91亚洲无吗| 日本高清不卡一区二区三区视频| 欧美1区2区3| 亚洲va中文在线播放免费| 天堂成人国产精品一区| 国产精品一区三区在线观看| 视频小说一区二区| 男人操女人的视频在线观看欧美| 天堂av在线| 日韩区欧美区| 不卡专区在线| 一区二区三区午夜视频| 久久wwww| 尤物精品在线| 国产香蕉精品| 亚洲二区免费| 欧美日韩亚洲一区二区三区在线| 亚洲天堂av资源在线观看| 国产亚洲第一伦理第一区| 日韩电影免费网站| 亚洲精品麻豆| 成人日韩精品| 欧美亚洲三级| 99视频精品全国免费| 日韩精品视频在线看| 成人在线黄色| 亚洲综合色婷婷在线观看| 国产精品成人a在线观看| 蜜桃传媒麻豆第一区在线观看| 91精品精品| 欧美日韩亚洲一区三区| 激情欧美一区二区三区| 国产精品一区二区99| 女同性一区二区三区人了人一| 欧美手机在线| 国产亚洲第一伦理第一区| 欧美大黑bbbbbbbbb在线| 久久只有精品| 亚洲日本欧美| 日韩精品免费一区二区三区| 国产精品天天看天天狠|