<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過程中,實例方法和類方法的區別是什么?

      0
      分享至

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



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

      表象區別就是:

      類方法前用@classmethod修飾

      靜態方法前用@staticmethod修飾

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

      用法區別

      實例方法

      也是普通方法,實例方法是我們最常用的方法,它定義時最少要包含一個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,完整實現了調用。

      本地方法

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

      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調用實例方法,不會報錯,程序正常執行。

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

      類方法

      類方法有一個特點,就是這個方法必須要有@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調用的父類的類方法,按照上述規則,是傳入的b的直屬類到cls中,也就是將B傳入了cls中,而不是A(這邊要注意區別),因此和B調用是一樣的。

      靜態方法

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

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

      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調用了方法,但是由于是靜態方法,訪問不了類屬性,因此不會將類A傳入所謂的cls中,靜態方法中也沒有cls這個參數,因此它的參數都是普通入參。

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

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

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

      要記住幾點

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

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

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

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

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

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


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

      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.

      相關推薦
      熱點推薦
      多數珠寶品牌商現已不回收白銀,部分周大福門店還表示目前黃金回收也已暫停

      多數珠寶品牌商現已不回收白銀,部分周大福門店還表示目前黃金回收也已暫停

      黃河新聞網呂梁
      2026-02-28 09:13:37
      “不買羽絨服你就滾!”女大學生咒罵母親,母親:準備好她輟學了

      “不買羽絨服你就滾!”女大學生咒罵母親,母親:準備好她輟學了

      糖逗在娛樂
      2026-02-28 18:48:59
      王思聰成功和懶懶分手,回國的懶懶被曝變賣奢侈品,網友吐槽太貴

      王思聰成功和懶懶分手,回國的懶懶被曝變賣奢侈品,網友吐槽太貴

      娛樂團長
      2025-11-16 15:45:42
      全A唯一,股價低至3元的龍頭,高盛,摩根聯手新進,股價跌90%

      全A唯一,股價低至3元的龍頭,高盛,摩根聯手新進,股價跌90%

      風風順
      2026-02-28 12:28:02
      10萬億度需求也不買!中國攤牌,輸電專線全叫停,國產電價教做人

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

      阿器談史
      2026-01-26 20:05:32
      蘋果向用戶推送iOS26.4.2,省電效果太頂,信號前所未有

      蘋果向用戶推送iOS26.4.2,省電效果太頂,信號前所未有

      庫克啥都聊
      2026-02-28 15:31:04
      天助阿森納:0-2大冷門,英超第3遭倒數第一掀翻,落后榜首10分

      天助阿森納:0-2大冷門,英超第3遭倒數第一掀翻,落后榜首10分

      側身凌空斬
      2026-02-28 05:57:46
      我們沒能阻止朝鮮擁有核武!沒能阻止薩德系統進入韓國!

      我們沒能阻止朝鮮擁有核武!沒能阻止薩德系統進入韓國!

      百態人間
      2026-02-07 15:30:17
      誰給了袁術稱帝的勇氣?是麾下18大猛將7大謀士,其中4個頂級謀士

      誰給了袁術稱帝的勇氣?是麾下18大猛將7大謀士,其中4個頂級謀士

      銘記歷史呀
      2026-02-27 21:39:51
      一只蒼蠅困死整個大陸?無法種地不能養馬,這才是非洲的窮根!

      一只蒼蠅困死整個大陸?無法種地不能養馬,這才是非洲的窮根!

      你是我心中最美星空
      2026-02-27 07:53:59
      大風追蹤 | “藥材商73萬元貨款因涉詐被凍結”新進展:警方排除涉案嫌疑,認定為貨款,銀行賬戶已解凍

      大風追蹤 | “藥材商73萬元貨款因涉詐被凍結”新進展:警方排除涉案嫌疑,認定為貨款,銀行賬戶已解凍

      大風新聞
      2026-02-28 18:33:04
      比恒大還慘!中國第二大民企倒了,負債7500億,創始人被帶走

      比恒大還慘!中國第二大民企倒了,負債7500億,創始人被帶走

      芳芳歷史燴
      2025-12-25 20:32:52
      向太向華強公開向佐向佑兒時視頻,向太顏值出眾被贊碾壓關之琳

      向太向華強公開向佐向佑兒時視頻,向太顏值出眾被贊碾壓關之琳

      韓小娛
      2026-02-28 16:14:30
      泰國新內閣組建完成,前總理佩通坦贏了,他信贏了,為泰黨也贏了

      泰國新內閣組建完成,前總理佩通坦贏了,他信贏了,為泰黨也贏了

      易昂楊
      2026-02-28 17:49:09
      美以對伊朗動手,俄羅斯、歐盟、巴基斯坦等多方發聲

      美以對伊朗動手,俄羅斯、歐盟、巴基斯坦等多方發聲

      參考消息
      2026-02-28 22:08:44
      喬治娜秀穿內衣照片引爭議:試想你是C羅,卻選擇娶了這樣的女人

      喬治娜秀穿內衣照片引爭議:試想你是C羅,卻選擇娶了這樣的女人

      蘭亭墨未干
      2026-03-01 00:04:49
      小米應召回37萬輛SU7,震驚全網!

      小米應召回37萬輛SU7,震驚全網!

      新零售參考Pro
      2026-02-27 17:10:09
      幾塊錢的維生素B2,竟是高血壓克星?提醒:還有助改善性生活

      幾塊錢的維生素B2,竟是高血壓克星?提醒:還有助改善性生活

      橘子約定
      2026-02-27 09:33:19
      中國正加速拋售美債,美專家:中國用了新拋售方式,完全無法干預

      中國正加速拋售美債,美專家:中國用了新拋售方式,完全無法干預

      似水流年忘我
      2026-01-29 01:24:08
      日本教練:執教蘇翊鳴直到死去 西方對中國偏見很深 愿當中日橋梁

      日本教練:執教蘇翊鳴直到死去 西方對中國偏見很深 愿當中日橋梁

      念洲
      2026-02-26 08:34:54
      2026-03-01 00:56:51
      51Testing軟件測試網 incentive-icons
      51Testing軟件測試網
      中國軟件測試人的精神家園
      1528文章數 13252關注度
      往期回顧 全部

      科技要聞

      狂攬1100億美元!OpenAI再創融資神話

      頭條要聞

      媒體:美以的真實目標已經擺上臺面 不達目的不罷休

      頭條要聞

      媒體:美以的真實目標已經擺上臺面 不達目的不罷休

      體育要聞

      球隊主力全報銷?頂風擺爛演都不演了

      娛樂要聞

      周杰倫兒子正面照曝光,與父親好像

      財經要聞

      沖突爆發 市場變天?

      汽車要聞

      嵐圖泰山黑武士版3月上市 搭載華為四激光智駕方案

      態度原創

      本地
      游戲
      藝術
      房產
      教育

      本地新聞

      津南好·四時總相宜

      所有人保持嘴角不變!生化危機:安魂曲里昂騷話大盤點

      藝術要聞

      驚艷!這位天使般的女子與油畫讓人心動不已!

      房產要聞

      濱江九小也來了!集齊海僑北+哈羅、寰島...江東教育要炸了!

      教育要聞

      “比預估高了20多分,激動得有點想哭!”今天有人歡呼,有人沉默,有人紅了眼眶,這一年都經歷了什么?

      無障礙瀏覽 進入關懷版