337p人体粉嫩胞高清图片,97人妻精品一区二区三区在线 ,日本少妇自慰免费完整版,99精品国产福久久久久久,久久精品国产亚洲av热一区,国产aaaaaa一级毛片,国产99久久九九精品无码,久久精品国产亚洲AV成人公司
網易首頁 > 網易號 > 正文 申請入駐

初學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.

相關推薦
熱點推薦
57歲王菲斷崖式衰老!臉腫皮膚松,十個月前和謝霆鋒秀恩愛差距大

57歲王菲斷崖式衰老!臉腫皮膚松,十個月前和謝霆鋒秀恩愛差距大

青梅侃史啊
2026-02-18 07:25:41
還記得20年前的《故事會》嗎?廣告不堪入目,簡直是個紙上"暗網"!

還記得20年前的《故事會》嗎?廣告不堪入目,簡直是個紙上"暗網"!

神奇故事
2026-03-17 23:54:32
影響市場重大事件:央行堅定維護股票、債券、外匯等金融市場平穩運行,繼續實施好適度寬松的貨幣政策,推進人民銀行法、金融穩定法等立法修法

影響市場重大事件:央行堅定維護股票、債券、外匯等金融市場平穩運行,繼續實施好適度寬松的貨幣政策,推進人民銀行法、金融穩定法等立法修法

每日經濟新聞
2026-03-20 07:56:12
朝鮮大將軍乘坐最新主戰坦克,其女當司機,他喜笑顏開!

朝鮮大將軍乘坐最新主戰坦克,其女當司機,他喜笑顏開!

阿龍聊軍事
2026-03-20 17:33:03
美貌這種資源,正在經歷史無前例的通貨膨脹。

美貌這種資源,正在經歷史無前例的通貨膨脹。

流蘇晚晴
2026-03-19 18:17:59
這兩條新聞放一起看,諷刺至極

這兩條新聞放一起看,諷刺至極

清書先生
2025-09-28 17:07:07
女子被觸摸隱私部位后續!衣服全被脫光,商家只開除,拒絕賠償

女子被觸摸隱私部位后續!衣服全被脫光,商家只開除,拒絕賠償

潮鹿逐夢
2026-03-18 10:26:41
男性衰老的標志:1臭、2大、2小,如果你沒有,說明還年輕!

男性衰老的標志:1臭、2大、2小,如果你沒有,說明還年輕!

健康科普365
2026-03-16 20:35:03
欠薪+賽季全敗!曝四川超新星不再為球隊出戰 或步張博源后塵

欠薪+賽季全敗!曝四川超新星不再為球隊出戰 或步張博源后塵

大嘴爵爺侃球
2026-03-20 15:41:57
太惡劣!上海人街頭最恨的行為之一,行拘罰款↗

太惡劣!上海人街頭最恨的行為之一,行拘罰款↗

看看新聞Knews
2026-03-20 19:57:06
52歲北京炒股冠軍罕見發聲:洗盤如果洗不掉散戶,莊家會怎么辦?

52歲北京炒股冠軍罕見發聲:洗盤如果洗不掉散戶,莊家會怎么辦?

股經縱橫談
2026-03-20 21:45:04
意外翻車!海港雖敗猶榮:穆斯卡特踐行什么是“不靠外援”踢中超

意外翻車!海港雖敗猶榮:穆斯卡特踐行什么是“不靠外援”踢中超

足球大腕
2026-03-20 21:50:41
為什么國家衛健委不建立一個統一電子病歷系統?網友回答真相了!

為什么國家衛健委不建立一個統一電子病歷系統?網友回答真相了!

另子維愛讀史
2026-03-20 19:19:48
武漢協和醫院重要發布!

武漢協和醫院重要發布!

越喬
2026-03-20 22:50:54
負分清零第3隊!浙江隊3輪2分排第6,海港錯失良機,海牛遙遙無期

負分清零第3隊!浙江隊3輪2分排第6,海港錯失良機,海牛遙遙無期

奧拜爾
2026-03-20 21:36:45
美國衰落,就是一個巨大的謊言

美國衰落,就是一個巨大的謊言

楓冷慕詩
2026-01-06 12:28:30
上交所受理宇樹科技股份有限公司科創板IPO申請

上交所受理宇樹科技股份有限公司科創板IPO申請

界面新聞
2026-03-20 17:30:47
多知名雞爪品牌聲明稱不用雙氧水,專家:“慘白色”產品須警惕

多知名雞爪品牌聲明稱不用雙氧水,專家:“慘白色”產品須警惕

新京報
2026-03-20 19:13:09
美以伊開打20天,下一步最大威脅,是糧食和淡水危機

美以伊開打20天,下一步最大威脅,是糧食和淡水危機

紅星新聞
2026-03-19 18:45:22
路虎別停事件媒體發出三問:誰若袒護絕不姑息

路虎別停事件媒體發出三問:誰若袒護絕不姑息

映射生活的身影
2026-03-20 14:28:46
2026-03-21 01:44:49
51Testing軟件測試網 incentive-icons
51Testing軟件測試網
中國軟件測試人的精神家園
1541文章數 13254關注度
往期回顧 全部

科技要聞

宇樹招股書拆解,人形機器人出貨量第一!

頭條要聞

向特朗普提問日記者遭瘋狂網暴 被罵幫中國讓高市難堪

頭條要聞

向特朗普提問日記者遭瘋狂網暴 被罵幫中國讓高市難堪

體育要聞

6年前的一場悲劇,造就了“法國瓦爾迪”

娛樂要聞

總臺首屆電影盛典,“沈馬”CP再合體

財經要聞

金融法草案向社會公開征求意見

汽車要聞

何小鵬坦白局:每月3億的“慌”與通向L4的堅定

態度原創

本地
藝術
手機
時尚
軍事航空

本地新聞

春色滿城關不住|紹興春日頂流,這片櫻花海藏不住了

藝術要聞

一位畫家跟美少女保姆模特的那個事

手機要聞

折疊iPhone曝12月發貨,蘋果Plus機型或重啟

推廣中獎名單-更新至2026年3月4日推廣

軍事要聞

特朗普會晤高市早苗 把美國襲擊伊朗比作偷襲珍珠港

無障礙瀏覽 進入關懷版