python方法的分類(實(shí)例方法恰梢、類方法、靜態(tài)方法)

方法和函數(shù)的區(qū)分

很多童鞋會比較疑惑梗掰,方法和函數(shù)有什么區(qū)別嵌言,都是通過def去定義的啊及穗?
只需要記住一點(diǎn)摧茴,方法是用來描述一個目標(biāo)的行為動作!
不論你是直接通過 類名.方法調(diào)用,還是通過由類生成的實(shí)例.方法調(diào)用拥坛。
方法都需要有一個目標(biāo)才能完成調(diào)用的操作蓬蝶。

方法分類

談到python的方法,很多人認(rèn)為就是一個class 然后跟你的方法名稱就完了猜惋,哪有什么分類丸氛?
最開始學(xué)類的時候我也是這么認(rèn)為,并且很多的入門書中也沒有提及這些著摔。
那么缓窜,到底方法分為哪幾類呢?
讓我們先來看一段代碼

class MainClass:
    def shilifangfa(self):
        print('這是一個實(shí)例方法')

    @classmethod
    def leifangfa(cls):
        print('這是一個類方法')
    @staticmethod
    def jingtaifangfa():
        print('這是一個靜態(tài)方法')

m=MainClass()
m.shilifangfa()
m.leifangfa()
m.jingtaifangfa()

output:
這是一個實(shí)例方法
這是一個類方法
這是一個靜態(tài)方法

好吧谍咆,先說下方法的分類吧:

  1. 實(shí)例方法
  2. 類方法
  3. 靜態(tài)方法
初步展示方法的區(qū)別

可是禾锤,這三種方法有什么區(qū)別呢,光看上面的這段代碼摹察,沒有任何差異啊恩掷。
那么我們把這段代碼稍作修改

class MainClass:
    def shilifangfa(self):
        print('這是一個實(shí)例方法',self)

    @classmethod
    def leifangfa(cls):
        print('這是一個類方法',cls)
    @staticmethod
    def jingtaifangfa():
        print('這是一個靜態(tài)方法')

m=MainClass()
m.shilifangfa()
m.leifangfa()
m.jingtaifangfa()
output:
這是一個實(shí)例方法 <__main__.MainClass object at 0x00000000012AF0B8>
這是一個類方法 <class '__main__.MainClass'>
這是一個靜態(tài)方法

這次的輸出和上次相比,是否看到實(shí)例方法供嚎,我們需要傳給它一個實(shí)例對象黄娘,而類方法我們需要傳給他的是一個類
那么如果我們給實(shí)例方法傳輸?shù)牟皇且粋€由類產(chǎn)生的實(shí)例會如何呢?

MainClass.shilifangfa()
TypeError: shilifangfa() missing 1 required positional argument: 'self'

報(bào)錯的意思很明顯峭状,我們需要傳給他一個實(shí)例的名稱,當(dāng)然你也可以隨便寫一個數(shù)值去傳遞逼争,那么也就沒有作為實(shí)例方法的意義了
說了實(shí)例方法优床,那么類方法呢?同樣我們換一種方式去調(diào)用

MainClass.leifangfa()
這是一個類方法 <class 'main.MainClass'>

實(shí)例方法與類方法的細(xì)化區(qū)別

這次沒有任何變化誓焦,為什么呢胆敞?
原因在于,當(dāng)使用類方法時杂伟,傳遞的參數(shù)應(yīng)該是一個類名移层,但如果是實(shí)例,系統(tǒng)會自動找到實(shí)例對應(yīng)的類名稱
仔細(xì)看看下面的代碼稿壁,你會對實(shí)例方法與類方法有更詳細(xì)的認(rèn)識

class MainClass:
    a=100 # 方法本身的屬性
    def shilifangfa(self):
        print('這是一個實(shí)例方法',self.a)
        print(self.index) # 正常訪問
        self.a=200 # 相當(dāng)于實(shí)例本身創(chuàng)建了一個屬性
        print(self.a) # output a=200
        print(MainClass.a) # output a=100


    @classmethod
    def leifangfa(cls):
        print(cls.index) # type object 'MainClass' has no attribute 'index'
        # 注意這句type object 它變相的告訴你幽钢,類也是一個對象,只不過是一個type的對象
        # 這就更驗(yàn)證了python中的那句傅是,萬物皆對象
        print('這是一個類方法',cls.a)
        cls.a = 200 # 修改了類本身的a
        print(cls.a)  # output a=200
        print(MainClass.a) # output a=200
        # print(cls.index) # 類方法無法獲取到實(shí)例的屬性
    @staticmethod
    def jingtaifangfa():
        print('這是一個靜態(tài)方法')

m=MainClass()
m.index=1000 # 實(shí)例本身的屬性
m.shilifangfa()
MainClass.leifangfa()
m.jingtaifangfa()

?本文由簡書作者:清風(fēng)Python 原創(chuàng) 如需轉(zhuǎn)載請注明

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末匪燕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子喧笔,更是在濱河造成了極大的恐慌帽驯,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件书闸,死亡現(xiàn)場離奇詭異尼变,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)浆劲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門嫌术,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人牌借,你說我怎么就攤上這事度气。” “怎么了膨报?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵磷籍,是天一觀的道長。 經(jīng)常有香客問我现柠,道長院领,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任够吩,我火速辦了婚禮比然,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘周循。我一直安慰自己谈秫,他們只是感情好扒寄,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拟烫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪迄本。 梳的紋絲不亂的頭發(fā)上硕淑,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機(jī)與錄音嘉赎,去河邊找鬼置媳。 笑死,一個胖子當(dāng)著我的面吹牛公条,可吹牛的內(nèi)容都是我干的拇囊。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼靶橱,長吁一口氣:“原來是場噩夢啊……” “哼寥袭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起关霸,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤传黄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后队寇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膘掰,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年佳遣,在試婚紗的時候發(fā)現(xiàn)自己被綠了识埋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡零渐,死狀恐怖窒舟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情相恃,我是刑警寧澤辜纲,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站拦耐,受9級特大地震影響耕腾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜杀糯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一扫俺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧固翰,春花似錦狼纬、人聲如沸羹呵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冈欢。三九已至,卻和暖如春盈简,著一層夾襖步出監(jiān)牢的瞬間凑耻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工柠贤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留香浩,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓臼勉,卻偏偏與公主長得像邻吭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子宴霸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法囱晴,類相關(guān)的語法,內(nèi)部類的語法猖败,繼承相關(guān)的語法速缆,異常的語法,線程的語...
    子非魚_t_閱讀 31,581評論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理恩闻,服務(wù)發(fā)現(xiàn)艺糜,斷路器,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 蘋果官方文檔翻譯 《Objective-C語言編程》(Programming with Objective-C) ...
    fever105閱讀 25,586評論 19 130
  • 上周在關(guān)于商業(yè)NGO及社會如何確保對于Orissa省女孩子被性侵害保持零容忍的態(tài)度的工作坊中幢尚,見到了4歲被性侵的受...
    juliazhu2000閱讀 481評論 0 2
  • 這兩天就安心的在家養(yǎng)病破停,雖然不是大病,但也好久沒病過了尉剩,成天忙這忙那真慢,只有借病才能清靜下來。清靜的感覺真好理茎,什么也...
    王悅yue閱讀 180評論 0 5