<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網易首頁 > 網易號 > 正文 申請入駐

      初學Python過程中,實例方法和類方法的區(qū)別是什么?

      0
      分享至

      在初學Python過程中,會遇到這樣的概念,一個類下面會有多個方法,有的叫類方法、有的叫靜態(tài)方法,還有的叫實例方法。當調用他們的時候,不免會有點蒙圈,那么他們之間的區(qū)別是什么呢?加我VX:atstudy-js 回復“測試”,進入 自動化測試學習交流群~~



      和類屬性一樣,類方法可以進行細致地劃分為類方法、實例方法和靜態(tài)方法。

      表象區(qū)別就是:

      類方法前用@classmethod修飾

      靜態(tài)方法前用@staticmethod修飾

      不加任何修飾的就是實例方法(普通方法)

      用法區(qū)別

      實例方法

      也是普通方法,實例方法是我們最常用的方法,它定義時最少要包含一個self參數,用于綁定調用此方法的實例對象(所謂綁定,即用實例調用的時候,不需要顯式的傳入)。

      換句話說,當實例調用方法的時候,會默認將實例本身傳入到這個參數self,而當類直接調用時,因為本身類型是一個class,不是實例對象,所以報錯。

      如果非要用類直接調用,需要手動傳入一個實例作為第一個參數。注意:若隨便傳入一個字符串的話,也不會報錯,但是會造成程序紊亂,因此不推薦這種調用方式。

      用如下這段代碼舉例說明:

      class A(object):

      def instance_method(self, X):

      print(f'instance_method :{X} : {self}')

      a = A()

      A.instance_method('x')

      A.instance_method(a, 'x')

      A.instance_method('strs', 'x')

      a.instance_method('a')

      代碼中 instance_method 為實例方法,而第6行類A調用了此方法,而實例方法默認傳入的應該是實例,而不是類,因此將x當做實例傳給了默認的self,此時實例方法還缺少一個參數沒有傳入,導致報錯:TypeError: instance_method() missing 1 required positional argument: 'x'。

      第7行糾正了第6行的做法,傳入了實例a,且傳入了一個參數x,所以不會報錯,self就是A的實例a。

      第8行將字符串代替實際的實例a傳入self,雖不會報錯,但是對于程序毫無價值,不推薦這樣使用,沒有意義。

      第9行是最常用的方法,實例a調用了實例方法,默認將實例a傳入了self,再將參數x傳入了X,完整實現(xiàn)了調用。

      本地方法

      就當做實例方法的一種吧,好奇心的驅使,如果實例方法沒有添加self這個參數呢,為了區(qū)分,我們且叫他“本地方法”。所謂本地,也就是實例無法調用,只能類自己調用。

      class A(object):

      def local_method():

      print(f'local_method')

      def local_method2(strs):

      print(f'local_method2')

      a = A()

      a.local_method()

      a.local_method2()

      A.local_method()

      如上代碼,第2行的local_method()就是個本地方法,而此時在第9行實例a調用這個本地方法的時候,由于程序會默認將實例a傳入參數self,但是本地方法沒有寫self,因此報錯:TypeError: A.local_method() takes 0 positional arguments but 1 was given。

      再看第5行的實例方法,為什么叫實例方法,明明沒有self啊?這里要特別說明下,self只是約定俗成的寫法,實際上隨便寫個什么字符串都可以的。因此第10行實例a調用實例方法,不會報錯,程序正常執(zhí)行。

      第11行類A調用本地方法,也是不會報錯的。但如果類A調用實例方法就和第一節(jié)講的報錯了。

      類方法

      類方法有一個特點,就是這個方法必須要有@classmethod來修飾。和實例方法類似,至少也要傳一個參數,約定俗稱為cls,Python會自動將類本身綁定到這個參數上面。

      類方法通常使用類直接調用,也可以用實例調用(不推薦)。當實例調用的時候,Python會將實例的最底層類(即實例直接所屬類)型傳入cls參數中。

      class A(object):

      name = 'I am Class A'

      @classmethod

      def class_method(cls, s):

      print(cls.name) # 可以訪問類成員print(cls.name) # 可以訪問類成員

      print(f"class_method : {cls} :: {s}")

      class B(A):

      name = 'I am Class B'

      a = A()

      b = B()

      A.class_method('I am class')

      a.class_method('I am instance')

      B.class_method('I am B class')

      b.class_method('I am b instance')

      如上代碼,B類繼承了A類,并復寫了name屬性,而此時A類中的方法就是類方法,有兩個參數,一個是默認的類參數cls,還有一個普通入參。

      第14行,A類直接調用自己的類方法,默認將自己傳入了cls,并將括號中的字符串傳給了參數s,用得恰到好處。此時第6行打印“I am Class A”可以看出,cls確實是傳的A。

      第15行用A的實例a調用類方法,會默認將a的直屬類(也就是A)傳到cls中,因此效果和A調用是一樣的。

      第16行用繼承類B調用的父類的類方法,既然是繼承,那么程序傳入的就是類B到cls中,由于B類中對name做了復寫,因此第6行打印出來的就是“I am Class B”。

      第17行用繼承類B的實例b調用的父類的類方法,按照上述規(guī)則,是傳入的b的直屬類到cls中,也就是將B傳入了cls中,而不是A(這邊要注意區(qū)別),因此和B調用是一樣的。

      靜態(tài)方法

      靜態(tài)方法是使用@staticmethod修飾的方法,它不能訪問任何類屬性和類方法,因為它不含self或cls這些特殊參數,因此也無法訪問類或實例中的成員。

      也就是說,Python沒有給他綁定實例或者類,要想使用,只能當參數來傳,所以在靜態(tài)方法中的入參都是普通參數,嚴格來講,上面說的本地方法應該也要寫成靜態(tài)方法。

      class A(object):

      @staticmethod

      def static_method(a, b):

      print(f"static_method : {a} + {b}")

      a = A()

      A.static_method('aa', 'bb')

      a.static_method('aa', 'bb')

      如上代碼中,盡管第7行類A調用了方法,但是由于是靜態(tài)方法,訪問不了類屬性,因此不會將類A傳入所謂的cls中,靜態(tài)方法中也沒有cls這個參數,因此它的參數都是普通入參。

      第8行的實例調用也是和A一樣的效果。

      所以邏輯上講,類方法應當只被類調用,實例方法只被實例調用,靜態(tài)方法兩者都能調用,主要區(qū)別在于參數傳遞上的區(qū)別。

      實例方法悄悄傳遞的是self引用作為參數,而類方法悄悄傳遞的是cls引用作為參數。

      要記住幾點

      1.實例調用實例方法和本地方法時,Python默認將實例本身作為第一個參數傳入。

      2.實例調用類方法時,Python默認將實例的最底層類作為第一個參數傳入。

      3.實例調用靜態(tài)方法時,Python啥也不傳,需要幾個參數就要傳幾個參數。

      4.類調用類方法時,Python默認將類本身作為第一個參數傳入。

      5.類調用非類方法時,Python啥也不傳,需要幾個參數就要傳幾個參數。

      最后:在我的V :atstudy-js,可以費領取一份10G軟件測試工程師面試寶典文檔資料。以及相對應的視頻學習教程免費分享!其中包括了有基礎知識、Linux必備、Shell、互聯(lián)網程序原理、Mysql數據庫、抓包工具專題、接口測試工具、測試進階-Python編程、Web自動化測試、APP自動化測試、接口自動化測試、測試高級持續(xù)集成、測試架構開發(fā)測試框架、性能測試、安全測試等。


      特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關推薦
      熱點推薦
      10萬億度需求也不買!中國攤牌,輸電專線全叫停,國產電價教做人

      10萬億度需求也不買!中國攤牌,輸電專線全叫停,國產電價教做人

      阿器談史
      2026-01-26 20:05:32
      比緬北更恐怖!曾經的旅游勝地,如今黃賭毒俱全,性交易隨處可見

      比緬北更恐怖!曾經的旅游勝地,如今黃賭毒俱全,性交易隨處可見

      來科點譜
      2025-10-24 09:25:32
      剛發(fā),大連突發(fā)地震,后續(xù)地震可能性為……!

      剛發(fā),大連突發(fā)地震,后續(xù)地震可能性為……!

      本賬號停運
      2026-02-09 19:48:05
      “利潤50%分給員工、不考勤不打卡”,河南男子創(chuàng)業(yè)學胖東來,還清105萬外債

      “利潤50%分給員工、不考勤不打卡”,河南男子創(chuàng)業(yè)學胖東來,還清105萬外債

      河南交通廣播1041
      2026-02-09 12:45:19
      長沙“互啃”后續(xù):沒實錘,婚離了!中年人的體面,真輸不起!

      長沙“互啃”后續(xù):沒實錘,婚離了!中年人的體面,真輸不起!

      王楔曉
      2026-01-08 11:31:21
      不要小瞧了日本,一旦中日開戰(zhàn),日本要對中國進行“三路打擊”

      不要小瞧了日本,一旦中日開戰(zhàn),日本要對中國進行“三路打擊”

      安安說
      2026-01-21 09:50:42
      中央明確!退休新規(guī)實施后,公務員及事業(yè)編制,不能延遲退休嗎?

      中央明確!退休新規(guī)實施后,公務員及事業(yè)編制,不能延遲退休嗎?

      南風不及你溫柔
      2026-02-09 23:52:36
      “不給6套房加1個億,不搬”,釘子戶張新國堅守14年,終敗給現(xiàn)實

      “不給6套房加1個億,不搬”,釘子戶張新國堅守14年,終敗給現(xiàn)實

      紅夢史說
      2025-07-11 11:23:39
      魔都天氣現(xiàn)場:春節(jié)天氣超前看!假期前半段暖且有雨,大年初二迎冷空氣

      魔都天氣現(xiàn)場:春節(jié)天氣超前看!假期前半段暖且有雨,大年初二迎冷空氣

      隨申Hi
      2026-02-09 20:57:03
      高市早苗表態(tài):著手推動修憲

      高市早苗表態(tài):著手推動修憲

      大風新聞
      2026-02-09 20:01:19
      在深圳,經濟一差,到處是詐騙

      在深圳,經濟一差,到處是詐騙

      愛下廚的阿釃
      2026-02-09 20:38:49
      李亞鵬宣布春節(jié)前暫停直播:不想占據熒幕叨擾大家,下次開播可能要到很久以后,將投入到嫣然醫(yī)院工作中

      李亞鵬宣布春節(jié)前暫停直播:不想占據熒幕叨擾大家,下次開播可能要到很久以后,將投入到嫣然醫(yī)院工作中

      臺州交通廣播
      2026-02-09 09:22:58
      特斯拉續(xù)航剩72公里,高速上突然斷電,售后回應引發(fā)爭議

      特斯拉續(xù)航剩72公里,高速上突然斷電,售后回應引發(fā)爭議

      大象新聞
      2026-02-09 10:01:09
      特朗普炮轟“超級碗”中場秀嘉賓,稱其表演“是對美國的侮辱”

      特朗普炮轟“超級碗”中場秀嘉賓,稱其表演“是對美國的侮辱”

      瀟湘晨報
      2026-02-09 23:17:19
      你見過最窩囊的人是啥樣?網友:原來大家都這么窩囊,我心病好了

      你見過最窩囊的人是啥樣?網友:原來大家都這么窩囊,我心病好了

      帶你感受人間冷暖
      2026-01-06 00:05:11
      巴拿馬急剎車:24小時改口保港口,中方反制有多狠?

      巴拿馬急剎車:24小時改口保港口,中方反制有多狠?

      老謝談史
      2026-02-09 14:53:19
      中國批準稀土出口,日媒歡呼:對華反制措施見效,下一秒遭打臉

      中國批準稀土出口,日媒歡呼:對華反制措施見效,下一秒遭打臉

      壹知眠羊
      2026-02-09 19:55:33
      新春走基層 | 快遞小哥成勞模大哥

      新春走基層 | 快遞小哥成勞模大哥

      人民資訊
      2026-02-08 12:02:27
      90歲焦晃現(xiàn)狀曝出:穿紙尿褲嚴重忘事,與小30歲妻子住無電梯頂層

      90歲焦晃現(xiàn)狀曝出:穿紙尿褲嚴重忘事,與小30歲妻子住無電梯頂層

      小徐講八卦
      2026-02-06 16:10:03
      德國那位軍事專家說得夠直白:美國不是怕中國,是怕打了也白打

      德國那位軍事專家說得夠直白:美國不是怕中國,是怕打了也白打

      扶蘇聊歷史
      2026-01-28 18:04:09
      2026-02-10 03:19:00
      51Testing軟件測試網 incentive-icons
      51Testing軟件測試網
      中國軟件測試人的精神家園
      1522文章數 13252關注度
      往期回顧 全部

      科技要聞

      實測|字節(jié)新模型帶著音效和復雜運鏡殺瘋了

      頭條要聞

      人民日報評"南博事件":無論涉及到什么人 絕不放任

      頭條要聞

      人民日報評"南博事件":無論涉及到什么人 絕不放任

      體育要聞

      不會打籃球,如何入選詹娜前男友第一陣容

      娛樂要聞

      央視電影活動名場面!明星站位太講究

      財經要聞

      滬深北交易所優(yōu)化再融資 釋放3個信號

      汽車要聞

      長安將搭鈉電池 好比汽車要裝柴油機?

      態(tài)度原創(chuàng)

      數碼
      教育
      手機
      時尚
      公開課

      數碼要聞

      曜越推出TG100桌面迷你機箱,219元

      教育要聞

      孩子愛玩手機不愛學習?你沒用對方法!

      手機要聞

      小米17 Max:去副屏+2億像素!小米18:升級驍龍8 Elite Gen6 Pro

      冬季穿衣越簡單越實用!從這些日常穿搭中收獲靈感,大方又自然

      公開課

      李玫瑾:為什么性格比能力更重要?

      無障礙瀏覽 進入關懷版