Python類(lèi)方法總結(jié)講解
一、類(lèi)方法
在類(lèi)中的函數(shù)稱(chēng)為類(lèi)方法。與普通函數(shù)定義稍有區(qū)別。
1.普通方法
1.1 普通方法定義
普通方法與一般函數(shù)的定義稍有區(qū)別的點(diǎn)在于第一個(gè)參數(shù)是self,,指代的意思是指向?qū)嵗龑?duì)象本身。如下圖定義
class Person: def __init__(self,name,age): # name=對(duì)象的那個(gè)name,age=對(duì)象的那個(gè)age self.name=name self.age=age
1.2 普通方法調(diào)用
思考一下函數(shù)的調(diào)用是函數(shù)名(),類(lèi)的方法調(diào)用呢?
類(lèi)方法調(diào)用必須要借助對(duì)象。調(diào)用方式:對(duì)象.方法名()。
不能直接用類(lèi)名.方法名(),前面已經(jīng)說(shuō)過(guò)了類(lèi)中的方法第一個(gè)參數(shù)是self,代表的是實(shí)例對(duì)象本身,所以類(lèi)是不能直接調(diào)用普通方法的
#實(shí)例化對(duì)象cat cat=Animals() #調(diào)用類(lèi)中普通方法run cat.run()
如果使用類(lèi)名.方法名的時(shí)候會(huì)出現(xiàn):TypeError: run() missing 1 required positional argument: 'self',遺失一個(gè)參數(shù)。
但實(shí)際上我們?cè)偈褂脤?duì)象.方法名()的時(shí)候也沒(méi)有帶self,卻沒(méi)有報(bào)遺失一個(gè)參數(shù)。
原因:當(dāng)我們實(shí)例化對(duì)象的時(shí)候,即cat=Animal()執(zhí)行的時(shí)候已經(jīng)將cat的地址傳給self,此時(shí)self指代的是cat.
2.魔術(shù)方法
2.1 魔術(shù)方法定義
前面普通方法是需要對(duì)象名.方法名()去調(diào)用,而我們的魔術(shù)方法比較特殊,他是在特殊時(shí)刻自動(dòng)觸發(fā),即不需要調(diào)用。
2.2 常見(jiàn)魔術(shù)方法
__init__(self,[參數(shù)名]) | 對(duì)象創(chuàng)建時(shí)自動(dòng)調(diào)用的方法 |
__str__(self,[參數(shù)名]) | 函數(shù)有返回值,當(dāng)打印對(duì)象名的時(shí)候自動(dòng)調(diào)用 |
__del__(self) | 當(dāng)刪除引用時(shí)自動(dòng)調(diào)用 |
__call__(elf,[參數(shù)名]) | 當(dāng)執(zhí)行對(duì)象名()時(shí)自動(dòng)調(diào)用即把對(duì)象當(dāng)成函數(shù)使用 |
看上圖我們只是創(chuàng)建了cat對(duì)象,并沒(méi)有調(diào)用__init__方法,但是卻執(zhí)行了方法里面的方法體,是因?yàn)樵趧?chuàng)建對(duì)象時(shí)python自動(dòng)觸發(fā)了。
__init__方法有什么作用:
定義一個(gè)類(lèi)時(shí),常常要定義屬性和方法,屬性是類(lèi)的一個(gè)特征,而方法是它能做的事情。
所有的人都有名字和年齡,所以我們要定義一個(gè)Person類(lèi),擁有兩個(gè)屬性名字和年齡
如果在類(lèi)里寫(xiě)如下圖
class Person(): name='jimi' age=12 def run(self): print('run') person1=Person() person2=Person()
那么person1和person2對(duì)象擁有了Person的屬性,但是此刻他倆的屬性一樣,可是并不符合每個(gè)人的特征啊?每個(gè)人的名字和年齡不一致的。那怎么樣才能創(chuàng)造出對(duì)象不一樣的屬性值,這里就用__init__
class Person: def __init__(self,name,age): # name=對(duì)象的那個(gè)name,age=對(duì)象的那個(gè)age self.name=name self.age=age person1=Person('meimei',12) # 打印person1的屬性 meimei 12 print(person1.name,person1.age) person2=Person('john',13) # # 打印person1的屬性 john 13 print(person2.name,person2.age)
__str__是用來(lái)打印對(duì)象時(shí)返回一個(gè)值,所以__str__是有return 語(yǔ)句的。如果不用__str__打印對(duì)象,對(duì)象就是一個(gè)地址
class Person: def __init__(self,name,age): # name=對(duì)象的那個(gè)name,age=對(duì)象的那個(gè)age self.name=name self.age=age # def __str__(self): # return '這是name:{},這是age:{}'.format(self.name,self.age) person1=Person('meimei',12) #打印結(jié)果<__main__.Person object at 0x0000025C1F932C50> print(person1)
3.類(lèi)方法
3.1 類(lèi)方法定義
class Person: def __init__(self,name,age): # name=對(duì)象的那個(gè)name,age=對(duì)象的那個(gè)age self.name=name self.age=age # def __str__(self,*krg,**krgs): # return '這是name:{},這是age:{}'.format(self.name,self.age) #類(lèi)方法 @classmethod def test1(cls): print('我是類(lèi)方法')
方法前用裝飾器@classmethod修飾。第一個(gè)參數(shù)為cls代表類(lèi)
類(lèi)方法特點(diǎn):類(lèi)方法里面不能調(diào)用普通方法
3.2 類(lèi)方法調(diào)用
- 對(duì)象名.方法名()
- 類(lèi)名.方法名()
4.靜態(tài)方法
4.1 靜態(tài)方法定義
class Person: def __init__(self,name,age): # name=對(duì)象的那個(gè)name,age=對(duì)象的那個(gè)age self.name=name self.age=age # def __str__(self): # return '這是name:{},這是age:{}'.format(self.name,self.age) def run(self): Person.test1() Person.test() print('我是run') @classmethod def test1(cls): print('我是類(lèi)方法') @staticmethod def test(*krgs): Person.test1() print('我是靜態(tài)方法')
靜態(tài)方法用裝飾器@staticmethod修飾,無(wú)cls,self參數(shù)
4.2 靜態(tài)方法調(diào)用
對(duì)象名.靜態(tài)方法名()
類(lèi)名.靜態(tài)方法名()
二 總結(jié)
普通方法中:
- 可調(diào)用普通方法,使用self.方法名()
- 可調(diào)用靜態(tài)方法,使用類(lèi)名.方法名()
- 可調(diào)用類(lèi)方法,使用類(lèi)名.類(lèi)名.方法名()
靜態(tài)方法:
- 不可調(diào)用普通方法
- 可調(diào)用類(lèi)方法,類(lèi)名.方法名()
- 可調(diào)用靜態(tài)方法,類(lèi)名.方法名()
類(lèi)方法:
- 不可調(diào)用普通方法
- 可調(diào)用類(lèi)方法,類(lèi)名.方法名()
- 可調(diào)用靜態(tài)方法,類(lèi)名.方法名()
到此這篇關(guān)于Python類(lèi)方法總結(jié)講解的文章就介紹到這了,更多相關(guān)Python類(lèi)方法總結(jié)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
數(shù)據(jù)清洗--DataFrame中的空值處理方法
今天小編就為大家分享一篇數(shù)據(jù)清洗--DataFrame中的空值處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07python報(bào)錯(cuò)TypeError: ‘NoneType‘ object is not subscriptable的解決
這篇文章主要給大家介紹了關(guān)于python報(bào)錯(cuò)TypeError: ‘NoneType‘ object is not subscriptable的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11python逐行讀寫(xiě)txt文件的實(shí)例講解
下面小編就為大家分享一篇python逐行讀寫(xiě)txt文件的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04win10下python3.8的PIL庫(kù)安裝過(guò)程
這篇文章主要介紹了win10下python3.8的PIL庫(kù)安裝方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06Pandas常用累計(jì)、同比、環(huán)比等統(tǒng)計(jì)方法實(shí)踐過(guò)程
這篇文章主要介紹了Pandas常用累計(jì)、同比、環(huán)比等統(tǒng)計(jì)方法實(shí)踐過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05Python-openpyxl表格讀取寫(xiě)入的案例詳解
這篇文章主要介紹了Python-openpyxl表格讀取寫(xiě)入的案例分析,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11Python中使用第三方庫(kù)xlutils來(lái)追加寫(xiě)入Excel文件示例
這篇文章主要介紹了Python中使用第三方庫(kù)xlutils來(lái)追加寫(xiě)入Excel文件示例,本文直接給出追加寫(xiě)入示例和追加效果,需要的朋友可以參考下2015-04-04