最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年08月17日 11:39:48   作者:Rocky0429  
這篇文章主要介紹了Python類(lèi)方法 & 靜態(tài)方法的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下

寫(xiě)在之前

這幾天的閱讀量蜜汁低,是什么原因我也沒(méi)搞清楚,如果你們覺(jué)得我哪里寫(xiě)的有問(wèn)題,或者是哪里不好,歡迎后臺(tái)或者微信告知我,先行謝過(guò)。

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

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

在開(kāi)始之前,先讓我們來(lái)看下面一段代碼:

class Sample:
 language = "C++"
 def __init__(self):
 self.language = "python"

def get_class_attr(cls):
 return cls.language

if __name__ == "__main__":
 print("sample.language:",Sample.language)
 r = get_class_attr(Sample)
 print("get class attribute:",r)
 f = Sample()
 print("instance attribute:",f.language)

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

知道了這個(gè),我們?nèi)缓髞?lái)分析一下函數(shù) get_class_attr(cls),在這個(gè)函數(shù)中參數(shù)用的是 cls,從函數(shù)體來(lái)看,要求它引用的對(duì)象應(yīng)該具有屬性 language,這說(shuō)明,不是隨隨便便哪個(gè)對(duì)象都可以。很巧的是在前面定義的類(lèi) Sample 中就有 language 這個(gè)屬性,于是在調(diào)用這個(gè)函數(shù)的時(shí)候,就直接將該類(lèi)對(duì)象作為方法 get_class_attr() 的參數(shù)。

Sample.language 是要得到類(lèi)屬性的值,get_class_attr(Sample) 所返回的就是類(lèi) Sample 的屬性 Sample.language 的值,所以對(duì)于上述例子來(lái)說(shuō),前面兩個(gè) print() 函數(shù)打印的結(jié)果應(yīng)該是一樣的。

f = Sample() 則是創(chuàng)建了一個(gè)實(shí)例,然后通過(guò) f.language 訪(fǎng)問(wèn)實(shí)例屬性。所以對(duì)于上述的代碼的運(yùn)行結(jié)果如下所示:

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

不知道經(jīng)過(guò)我上述的解釋你是否明白了,如果沒(méi)明白,建議你再仔細(xì)對(duì)比一下上述的運(yùn)行結(jié)果和分析的過(guò)程。

在上述的例子中,比較特殊的函數(shù)應(yīng)該是 get_class_attr(cls),它是寫(xiě)在類(lèi)的外面的,然而這個(gè)函數(shù)又只能調(diào)用前面寫(xiě)的那個(gè)類(lèi)對(duì)象,因?yàn)椴皇撬袑?duì)象都有那個(gè)特別的 language 屬性,這種函數(shù)寫(xiě)在外面不利于后期的維護(hù),我們應(yīng)該避免這種情況的發(fā)生,而避免的方法就是把函數(shù)和類(lèi)寫(xiě)在一起,所以就有了下面這種寫(xiě)法:

class sample:
 language = "C++"
 def __init__(self):
 self.language = "python"

 @classmethod
 def get_class_attr(cls):
 return cls.language

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

在上面這個(gè)修改的代碼中,出現(xiàn)了 @classmethod,這是一個(gè)裝飾器,我們?cè)诤瘮?shù)的那部分講到過(guò)。這里需要我們注意的是,@classmethod 所裝飾的方法的參數(shù)中,第一個(gè)參數(shù)不是 self,這個(gè)和我們常規(guī)認(rèn)識(shí)中的類(lèi)的方法有所區(qū)別。這里使用了參數(shù) cls,這是習(xí)慣的寫(xiě)法,當(dāng)然用其它的也可以。讓我們來(lái)看一下運(yùn)行的結(jié)果:

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

通過(guò)上面的運(yùn)行結(jié)果我們可以看到,不管是通過(guò)類(lèi)還是實(shí)例來(lái)執(zhí)行 get_class_attr() 得到的結(jié)果都是類(lèi)屬性的值,這說(shuō)明裝飾器 @classmethod 所裝飾的方法,它的參數(shù) cls 引用的對(duì)象是類(lèi)對(duì)象 Sample。

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

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

import random

def judge(n):
 num = random.randint(1,100)
 return num - n > 0

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

先看一下上面的代碼,類(lèi) Sample 里面使用了外面的函數(shù) judge(n),這種類(lèi)和函數(shù)的關(guān)系也是因?yàn)橄嗷リP(guān)聯(lián),所以后期的程序維護(hù)可能會(huì)出問(wèn)題,于是為了便于維護(hù),我們同樣對(duì)程序進(jìn)行了修改:

import random

class 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 > 0

if __name__ == "__main__":
 s = Sample('rocky')
 name = s.get_name(23)
 print(name)

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

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

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

寫(xiě)在之后

方法是類(lèi)的重要組成部分,本章所講的類(lèi)方法和靜態(tài)方法讓我們?cè)谑褂妙?lèi)的時(shí)候有了更加便利的工具。

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

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

The end。

以上就是深入了解Python 方法之類(lèi)方法 & 靜態(tài)方法的詳細(xì)內(nèi)容,更多關(guān)于python 類(lèi)方法和靜態(tài)方法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 在tensorflow中實(shí)現(xiàn)去除不足一個(gè)batch的數(shù)據(jù)

    在tensorflow中實(shí)現(xiàn)去除不足一個(gè)batch的數(shù)據(jù)

    今天小編就為大家分享一篇在tensorflow中實(shí)現(xiàn)去除不足一個(gè)batch的數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • pycharm最新免費(fèi)激活碼至2099年(21.3.18親測(cè)可用)

    pycharm最新免費(fèi)激活碼至2099年(21.3.18親測(cè)可用)

    這篇文章主要介紹了pycharm最新的激活碼及激活碼的使用方法,幫助大家更好的利用pycharm學(xué)習(xí)python,感興趣的朋友可以了解下。
    2021-03-03
  • 簡(jiǎn)單了解如何封裝自己的Python包

    簡(jiǎn)單了解如何封裝自己的Python包

    這篇文章主要介紹了簡(jiǎn)單了解如何封裝自己的Python包,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • selenium中常見(jiàn)的表單元素操作方法總結(jié)

    selenium中常見(jiàn)的表單元素操作方法總結(jié)

    Selenium可以驅(qū)動(dòng)瀏覽器來(lái)執(zhí)行一些操作,也就是說(shuō)可以讓瀏覽器模擬執(zhí)行一些動(dòng)作,下面這篇文章主要給大家介紹了關(guān)于selenium中常見(jiàn)的表單元素操作方法,需要的朋友可以參考下
    2022-02-02
  • python常規(guī)方法實(shí)現(xiàn)數(shù)組的全排列

    python常規(guī)方法實(shí)現(xiàn)數(shù)組的全排列

    這篇文章主要介紹了python常規(guī)方法實(shí)現(xiàn)數(shù)組的全排列,實(shí)例分析了全排列的概念及Python常規(guī)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-03-03
  • python針對(duì)excel的操作技巧

    python針對(duì)excel的操作技巧

    這篇文章主要介紹了python針對(duì)excel的操作方法,需要的朋友可以參考下
    2018-03-03
  • python粘包的解決方案

    python粘包的解決方案

    粘包就是在數(shù)據(jù)傳輸過(guò)程中有多個(gè)數(shù)據(jù)包被粘連在一起被發(fā)送或接受,本文主要介紹了python粘包的解決方案,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • python中class(object)的含義是什么以及用法

    python中class(object)的含義是什么以及用法

    這篇文章主要介紹了python中class(object)的含義是什么以及用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Python批量修改文件名案例匯總

    Python批量修改文件名案例匯總

    在文件管理和數(shù)據(jù)處理中,批量修改文件名是一項(xiàng)常見(jiàn)且重要的任務(wù),Python作為一種功能強(qiáng)大的編程語(yǔ)言,提供了豐富的庫(kù)和工具來(lái)簡(jiǎn)化這一過(guò)程,本文將結(jié)合實(shí)際案例,詳細(xì)介紹如何通過(guò)Python批量修改文件名,需要的朋友可以參考下
    2024-08-08
  • python NumPy ndarray二維數(shù)組 按照行列求平均實(shí)例

    python NumPy ndarray二維數(shù)組 按照行列求平均實(shí)例

    今天小編就為大家分享一篇python NumPy ndarray二維數(shù)組 按照行列求平均實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11

最新評(píng)論

怀仁县| 九龙县| 改则县| 淮阳县| 夏河县| 长顺县| 天门市| 天气| 靖州| 独山县| 尼勒克县| 图片| 桦南县| 和顺县| 连城县| 临武县| 中超| 开原市| 九寨沟县| 茌平县| 江安县| 石柱| 兰溪市| 汤阴县| 张家界市| 特克斯县| 天柱县| 金塔县| 三台县| 保山市| 龙山县| 东乡县| 广丰县| 乌兰县| 佛山市| 泰宁县| 西藏| 临沭县| 土默特左旗| 合川市| 平原县|