国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁 > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

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

0
分享至

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

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

表象區(qū)別就是:

類方法前用@classmethod修飾

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

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

用法區(qū)別

實(shí)例方法

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

換句話說,當(dāng)實(shí)例調(diào)用方法的時(shí)候,會(huì)默認(rèn)將實(shí)例本身傳入到這個(gè)參數(shù)self,而當(dāng)類直接調(diào)用時(shí),因?yàn)楸旧眍愋褪且粋€(gè)class,不是實(shí)例對(duì)象,所以報(bào)錯(cuò)。

如果非要用類直接調(diào)用,需要手動(dòng)傳入一個(gè)實(shí)例作為第一個(gè)參數(shù)。注意:若隨便傳入一個(gè)字符串的話,也不會(huì)報(bào)錯(cuò),但是會(huì)造成程序紊亂,因此不推薦這種調(diào)用方式。

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

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 為實(shí)例方法,而第6行類A調(diào)用了此方法,而實(shí)例方法默認(rèn)傳入的應(yīng)該是實(shí)例,而不是類,因此將x當(dāng)做實(shí)例傳給了默認(rèn)的self,此時(shí)實(shí)例方法還缺少一個(gè)參數(shù)沒有傳入,導(dǎo)致報(bào)錯(cuò):TypeError: instance_method() missing 1 required positional argument: 'x'。

第7行糾正了第6行的做法,傳入了實(shí)例a,且傳入了一個(gè)參數(shù)x,所以不會(huì)報(bào)錯(cuò),self就是A的實(shí)例a。

第8行將字符串代替實(shí)際的實(shí)例a傳入self,雖不會(huì)報(bào)錯(cuò),但是對(duì)于程序毫無價(jià)值,不推薦這樣使用,沒有意義。

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

本地方法

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

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()就是個(gè)本地方法,而此時(shí)在第9行實(shí)例a調(diào)用這個(gè)本地方法的時(shí)候,由于程序會(huì)默認(rèn)將實(shí)例a傳入?yún)?shù)self,但是本地方法沒有寫self,因此報(bào)錯(cuò):TypeError: A.local_method() takes 0 positional arguments but 1 was given。

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

第11行類A調(diào)用本地方法,也是不會(huì)報(bào)錯(cuò)的。但如果類A調(diào)用實(shí)例方法就和第一節(jié)講的報(bào)錯(cuò)了。

類方法

類方法有一個(gè)特點(diǎn),就是這個(gè)方法必須要有@classmethod來修飾。和實(shí)例方法類似,至少也要傳一個(gè)參數(shù),約定俗稱為cls,Python會(huì)自動(dòng)將類本身綁定到這個(gè)參數(shù)上面。

類方法通常使用類直接調(diào)用,也可以用實(shí)例調(diào)用(不推薦)。當(dāng)實(shí)例調(diào)用的時(shí)候,Python會(huì)將實(shí)例的最底層類(即實(shí)例直接所屬類)型傳入cls參數(shù)中。

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類,并復(fù)寫了name屬性,而此時(shí)A類中的方法就是類方法,有兩個(gè)參數(shù),一個(gè)是默認(rèn)的類參數(shù)cls,還有一個(gè)普通入?yún)ⅰ?/p>

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

第15行用A的實(shí)例a調(diào)用類方法,會(huì)默認(rèn)將a的直屬類(也就是A)傳到cls中,因此效果和A調(diào)用是一樣的。

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

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

靜態(tài)方法

靜態(tài)方法是使用@staticmethod修飾的方法,它不能訪問任何類屬性和類方法,因?yàn)樗缓瑂elf或cls這些特殊參數(shù),因此也無法訪問類或?qū)嵗械某蓡T。

也就是說,Python沒有給他綁定實(shí)例或者類,要想使用,只能當(dāng)參數(shù)來傳,所以在靜態(tài)方法中的入?yún)⒍际瞧胀▍?shù),嚴(yán)格來講,上面說的本地方法應(yīng)該也要寫成靜態(tài)方法。

class A(object):

@staticmethod

def static_method(a, b):

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

a = A()

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

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

如上代碼中,盡管第7行類A調(diào)用了方法,但是由于是靜態(tài)方法,訪問不了類屬性,因此不會(huì)將類A傳入所謂的cls中,靜態(tài)方法中也沒有cls這個(gè)參數(shù),因此它的參數(shù)都是普通入?yún)ⅰ?/p>

第8行的實(shí)例調(diào)用也是和A一樣的效果。

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

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

要記住幾點(diǎn)

1.實(shí)例調(diào)用實(shí)例方法和本地方法時(shí),Python默認(rèn)將實(shí)例本身作為第一個(gè)參數(shù)傳入。

2.實(shí)例調(diào)用類方法時(shí),Python默認(rèn)將實(shí)例的最底層類作為第一個(gè)參數(shù)傳入。

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

4.類調(diào)用類方法時(shí),Python默認(rèn)將類本身作為第一個(gè)參數(shù)傳入。

5.類調(diào)用非類方法時(shí),Python啥也不傳,需要幾個(gè)參數(shù)就要傳幾個(gè)參數(shù)。

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

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

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.

相關(guān)推薦
熱點(diǎn)推薦
汽油用量暴跌得嚇人,數(shù)據(jù)出來大家都驚了!未來油價(jià)會(huì)大幅降嗎?

汽油用量暴跌得嚇人,數(shù)據(jù)出來大家都驚了!未來油價(jià)會(huì)大幅降嗎?

小李子體育
2026-02-28 19:06:52
鄒市明一家國外度假!冉瑩穎膘肥體壯不好惹,軒軒一頭白毛好土氣

鄒市明一家國外度假!冉瑩穎膘肥體壯不好惹,軒軒一頭白毛好土氣

小徐講八卦
2026-03-01 05:51:11
伊朗革命衛(wèi)隊(duì)最新聲明!

伊朗革命衛(wèi)隊(duì)最新聲明!

占豪
2026-03-01 00:35:19
主人開出服務(wù)區(qū)40公里后才發(fā)現(xiàn)沒帶狗, 回去找時(shí)看到難忘的一幕

主人開出服務(wù)區(qū)40公里后才發(fā)現(xiàn)沒帶狗, 回去找時(shí)看到難忘的一幕

觀察鑒娛
2026-02-28 10:20:09
一旦爆發(fā)世界大戰(zhàn),誰敢直接攻擊美國本土,美上將:只有一個(gè)國家

一旦爆發(fā)世界大戰(zhàn),誰敢直接攻擊美國本土,美上將:只有一個(gè)國家

風(fēng)流女漢
2026-02-09 23:23:10
蔚來李斌罕見出現(xiàn)在高規(guī)格政治場(chǎng)合

蔚來李斌罕見出現(xiàn)在高規(guī)格政治場(chǎng)合

一見財(cái)經(jīng)
2026-02-28 10:50:47
美以襲擊造成伊朗一學(xué)校51人死亡 現(xiàn)場(chǎng)一片廢墟 民眾崩潰尖叫

美以襲擊造成伊朗一學(xué)校51人死亡 現(xiàn)場(chǎng)一片廢墟 民眾崩潰尖叫

新華社
2026-02-28 21:03:12
大連男子把車停在路邊,行車記錄儀拍下令人作嘔一幕……

大連男子把車停在路邊,行車記錄儀拍下令人作嘔一幕……

環(huán)球網(wǎng)資訊
2026-03-01 07:57:05
美以動(dòng)手了!明明伊朗已經(jīng)慫到了家,為何還要打?原因其實(shí)很簡(jiǎn)單

美以動(dòng)手了!明明伊朗已經(jīng)慫到了家,為何還要打?原因其實(shí)很簡(jiǎn)單

剛哥說法365
2026-02-28 18:42:47
杜聿明晚年談孫立人,直言:賣主求榮的小人,根本不是民族英雄

杜聿明晚年談孫立人,直言:賣主求榮的小人,根本不是民族英雄

阿光的技巧課堂
2026-02-26 18:02:39
“00后”陳某某被押赴刑場(chǎng) 執(zhí)行死刑

“00后”陳某某被押赴刑場(chǎng) 執(zhí)行死刑

閃電新聞
2026-02-07 16:53:35
任弼時(shí)46歲時(shí)猝然離世,毛主席為黨中央定下一條規(guī)矩,用意深遠(yuǎn)

任弼時(shí)46歲時(shí)猝然離世,毛主席為黨中央定下一條規(guī)矩,用意深遠(yuǎn)

寄史言志
2026-02-15 15:07:08
一位風(fēng)水大師說:人最好的風(fēng)水就這六點(diǎn),聽完恍然大悟

一位風(fēng)水大師說:人最好的風(fēng)水就這六點(diǎn),聽完恍然大悟

一口娛樂
2026-02-28 00:25:03
白馬會(huì)所一夜覆滅

白馬會(huì)所一夜覆滅

來科點(diǎn)譜
2026-02-28 07:45:18
給央視賣命19年,連站6年零下幾十度春晚分會(huì)場(chǎng),撒貝寧沒他微信

給央視賣命19年,連站6年零下幾十度春晚分會(huì)場(chǎng),撒貝寧沒他微信

百態(tài)人間
2026-02-28 15:31:33
87分鐘絕殺!凱恩雙響刷爆紀(jì)錄,3-2雙殺多特,拜仁11分領(lǐng)跑

87分鐘絕殺!凱恩雙響刷爆紀(jì)錄,3-2雙殺多特,拜仁11分領(lǐng)跑

我的護(hù)球最獨(dú)特
2026-03-01 03:33:52
29萬人逃離湖南,22萬出走吉林!人口遷徙洗牌,真正贏家非北上廣

29萬人逃離湖南,22萬出走吉林!人口遷徙洗牌,真正贏家非北上廣

通文知史
2026-02-27 00:00:04
小區(qū)樓上天天晚上都有女的大聲叫。。。

小區(qū)樓上天天晚上都有女的大聲叫。。。

微微熱評(píng)
2025-12-24 00:26:04
小米巴塞羅那炸場(chǎng)!真徠卡手機(jī)1.6萬元開賣,VGT超跑等9大新品齊發(fā)

小米巴塞羅那炸場(chǎng)!真徠卡手機(jī)1.6萬元開賣,VGT超跑等9大新品齊發(fā)

智東西
2026-03-01 02:11:29
元朝僅存97年,卻改寫中國千年國運(yùn)!

元朝僅存97年,卻改寫中國千年國運(yùn)!

沒有偏旁的常慶
2026-02-28 08:00:16
2026-03-01 10:19:00
51Testing軟件測(cè)試網(wǎng) incentive-icons
51Testing軟件測(cè)試網(wǎng)
中國軟件測(cè)試人的精神家園
1528文章數(shù) 13252關(guān)注度
往期回顧 全部

科技要聞

狂攬1100億美元!OpenAI再創(chuàng)融資神話

頭條要聞

牛彈琴:中東大戰(zhàn)開始 有三個(gè)可怕的后果

頭條要聞

牛彈琴:中東大戰(zhàn)開始 有三個(gè)可怕的后果

體育要聞

球隊(duì)主力全報(bào)銷?頂風(fēng)擺爛演都不演了

娛樂要聞

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

財(cái)經(jīng)要聞

沖突爆發(fā) 市場(chǎng)變天?

汽車要聞

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

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

游戲
數(shù)碼
旅游
房產(chǎn)
公開課

魔壇節(jié)奏丨小蒼回應(yīng)為何不結(jié)婚,Sky青訓(xùn)營(yíng)線下集訓(xùn)名單出爐

數(shù)碼要聞

小米Watch 5智能手表海外發(fā)布,搭載谷歌Wear OS系統(tǒng)

旅游要聞

春晚一鳴,“爾濱”“燃”冬!百萬人潮涌入中央大街,道里區(qū)交出開年最“熱”文旅答卷

房產(chǎn)要聞

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

公開課

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

無障礙瀏覽 進(jìn)入關(guān)懷版