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

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

深入了解Python 方法之類方法 & 靜態方法

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

寫在之前

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

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

類方法 & 靜態方法

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

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() 則是創建了一個實例,然后通過 f.language 訪問實例屬性。所以對于上述的代碼的運行結果如下所示:

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

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

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

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())

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

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

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

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

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

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),這種類和函數的關系也是因為相互關聯,所以后期的程序維護可能會出問題,于是為了便于維護,我們同樣對程序進行了修改:

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)

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

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

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

寫在之后

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

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

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

The end。

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

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品国产第一福利网站| 免费日韩视频| 99精品在线免费在线观看| 久久不见久久见中文字幕免费| 日本不卡一区二区三区| 亚洲成人三区| 另类国产ts人妖高潮视频| 国产成人精品一区二区三区免费 | 国产精品丝袜在线播放| 亚洲v在线看| 国产精品日韩久久久| 麻豆精品久久久| 高清日韩欧美| 中文字幕在线高清| 荡女精品导航| 日韩精品欧美| 久久九九99| 日韩精品一级中文字幕精品视频免费观看 | 色狠狠一区二区三区| 亚洲精品系列| 欧美日韩一区二区三区四区在线观看| 天堂va欧美ⅴa亚洲va一国产| 国产一区二区久久久久| 亚洲伦乱视频| 蜜桃视频一区二区| 国产欧美日韩一区二区三区在线| 亚洲精品进入| 国产成人精品一区二区免费看京| 日韩精品第一区| 99国产精品| 亚洲一区黄色| 成人在线黄色| 深夜日韩欧美| 久久精品国产精品亚洲毛片| 亚洲a成人v| 中文字幕在线高清| 色综合视频一区二区三区日韩| 成人av动漫在线观看| 欧美天堂视频| 久久69成人| 国产资源在线观看入口av| 日韩av中文字幕一区二区三区| 色婷婷精品视频| 美女精品一区二区| 日韩专区一卡二卡| 香蕉人人精品| 激情亚洲影院在线观看| 免费视频一区二区三区在线观看| 日韩电影免费在线观看| 欧美日韩调教| 天堂va在线高清一区| 美国欧美日韩国产在线播放| 亚洲午夜天堂| 久久国产精品久久久久久电车| 欧美亚洲二区| 日韩国产综合| 欧美sm一区| 国产成人精品福利| 国产精品地址| 美日韩一区二区三区| 国产66精品| 国产一区精品福利| 亚洲精品麻豆| 性一交一乱一区二区洋洋av| 99国产精品久久久久久久成人热| 福利一区二区| 999国产精品永久免费视频app| 欧美黄页在线免费观看| 麻豆精品视频在线| 在线一区视频观看| 欧美日韩中文一区二区| 亚洲欧美久久久| 国产亚洲精aa在线看| 免费在线观看一区| 99成人在线视频| 91精品推荐| 免费人成精品欧美精品| 亚洲女同中文字幕| 久久香蕉精品| 99久久久久久中文字幕一区| 久久美女性网| 日本亚洲三级在线| 亚洲尤物在线| 欧美成人精品一级| 欧美天堂亚洲电影院在线观看| 亚洲精一区二区三区| 精品一区二区三区视频在线播放 | 韩国久久久久久| 日韩一级精品| 久久精品国产免费| 女生影院久久| 成人羞羞在线观看网站| 亚洲夜间福利| 欧美成人午夜| 亚洲国产专区| 一级成人国产| 另类中文字幕国产精品| 国产欧美日韩视频在线 | 蜜桃av.网站在线观看| 亚洲自啪免费| 日韩欧美中文字幕电影| av最新在线| 日本免费新一区视频| 亚洲免费福利| 欧美一区自拍| 伊人久久成人| 国产在线视频欧美一区| 日韩区一区二| 国内精品福利| 成人午夜毛片| 精品国产成人| 日韩三级精品| 日韩视频一区| 欧美亚洲国产精品久久| 日韩不卡手机在线v区| 日本va欧美va瓶| 亚洲尤物在线| 一本一道久久a久久精品蜜桃| 成人在线视频免费| 麻豆精品蜜桃视频网站| 午夜性色一区二区三区免费视频| 亚洲伦乱视频| 成人在线超碰| 久久国内精品自在自线400部| 欧美日韩国产欧| 136国产福利精品导航网址| 国产精品xxx在线观看| 狠狠爱www人成狠狠爱综合网| 青青草伊人久久| 婷婷亚洲成人| 国产精品一区二区三区美女| 天堂va欧美ⅴa亚洲va一国产| 日韩国产欧美| 成人台湾亚洲精品一区二区| 91精品国产自产观看在线 | 男女激情视频一区| 免费精品视频| 蜜桃久久av一区| 久久精品97| 精品一区二区三区亚洲 | 免费观看在线综合| 久久久五月天| 黄色在线一区| 蜜桃视频在线观看一区二区| 中文视频一区| 国产精品草草| 最新中文字幕在线播放| 精品成av人一区二区三区| 国产精品久久久久久久免费观看 | 香蕉成人av| 日韩专区精品| 亚洲综合不卡| 欧美91在线| 蜜臀av国产精品久久久久| 精品日产乱码久久久久久仙踪林| 午夜在线精品偷拍| 99视频精品视频高清免费| 亚洲色图国产| 亚洲婷婷丁香| 少妇久久久久| 日韩**一区毛片| 亚洲国产日韩欧美在线| 中文字幕一区二区精品区| 国产videos久久| 美女日韩在线中文字幕| 国产资源在线观看入口av| 欧美aⅴ一区二区三区视频| 在线观看一区| 香蕉久久精品| 久久久久久美女精品| 亚洲精品**中文毛片| 激情综合婷婷| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 亚洲国产福利| 桃色av一区二区| 国产精品av久久久久久麻豆网| 国产日韩一区二区三区在线播放| 国产精品调教| 亚洲一区亚洲| 日韩欧美不卡| 欧美激情视频一区二区三区免费 | 香蕉久久久久久久av网站| 欧美精品三级在线| 免费精品视频最新在线| 亚洲性色av| 精品视频国内| 欧美日韩一区自拍| 日本不卡中文字幕| 中文字幕日韩亚洲| 国产亚洲精品久久久久婷婷瑜伽| av资源新版天堂在线| 精品国产一区二区三区性色av| 日韩1区2区日韩1区2区| 日韩中文字幕一区二区三区| 99久久久久国产精品| 91精品一区二区三区综合| 欧美xxxx中国| 欧美激情日韩| 国产精品伦理久久久久久| 国产一区二区三区免费在线|