python中類方法、靜態(tài)方法和實(shí)例方法的區(qū)別(自學(xué)筆記)記住三句話(代碼實(shí)例)
首先明白類是什么,通俗點(diǎn)說,類就是一個(gè)模板,是面向?qū)ο缶幊檀a泛型中,將數(shù)據(jù)和對(duì)數(shù)據(jù)的操作方法(既函數(shù))打包起來的一種模板,而對(duì)象就是模板類的一個(gè)實(shí)例。通俗點(diǎn)說,類就像一個(gè)盒子,將數(shù)據(jù)屬性和函數(shù)打包起來扔進(jìn)去,對(duì)象就像是這個(gè)盒子的名字,在進(jìn)行代碼編程的時(shí)候,我們就負(fù)責(zé)搭積木,將這些盒子堆在一起,程序就被抽象為一個(gè)或多個(gè)對(duì)象,通過對(duì)象之間的交互實(shí)現(xiàn)程序的功能,而不是一系列的指令。

(找的網(wǎng)圖,懶得畫了,大概就這個(gè)意思就行了^-^)一個(gè)個(gè)盒子就是一個(gè)個(gè)類,在整個(gè)程序中通過對(duì)象的交互實(shí)現(xiàn)程序的功能,面向?qū)ο缶幊?,核心要解決的問題就是:省事(專業(yè)點(diǎn)就是代碼可讀性高,易于編程與更改)

言歸正傳言歸正傳
聲明一個(gè)類的時(shí)候,類中的變量分為:類變量和實(shí)例變量
類中的方法分為:實(shí)例方法,類方法和靜態(tài)方法
類方法:聲明類方法標(biāo)識(shí)符@classmethod 必須使用參數(shù)cls 可以訪問類變量(只有類方法可以訪問類變量),可以通過類名或者實(shí)例名來訪問
靜態(tài)方法:聲明靜態(tài)方法標(biāo)識(shí)符@staticmethod?不能訪問類變量也不能訪問實(shí)例變量,可以通過類名或者實(shí)例名來訪問
實(shí)例方法:聲明實(shí)例方法必須使用參數(shù)self,不能訪問類變量,只能通過實(shí)例名來訪問
代碼實(shí)例:
class dogs():
? ?#類變量,只能由類方法訪問
? ?dogbook={'黃色':30,'黑色':20,'白色':0}
? ?def __init__(self,name,color,weight):
? ? ? ?self.name=name
? ? ? ?self.color=color
? ? ? ?self.weight=weight
? ?#定義一個(gè)實(shí)例方法,聲明實(shí)例方法必須使用參數(shù)self,不能訪問類變量,只能通過實(shí)例名來訪問
? ?def bark(self):
? ? ? ?print(f"{self.name}叫了起來")
? ?#定義類方法,聲明類方法必須使用參數(shù)cls 可以訪問類變量,可以通過類名或者實(shí)例名來訪問
? ?@classmethod
? ?def dog_num(cls):
? ? ? ?num=0
? ? ? ?for v in cls.dogbook.values():
? ? ? ? ? ?num = num+v
? ? ? ?return num
? ?#定義靜態(tài)方法,不能訪問類變量也不能訪問實(shí)例變量,可以通過類名或者實(shí)例名來訪問
? ?@staticmethod
? ?def total_weight(dogs):
? ? ? ?total = 0
? ? ? ?for i in dogs:
? ? ? ? ? ?total =total+i.weight
? ? ? ?return total
#類變量只能通過類名來訪問,dog_num()是類方法,在類方法中也可以訪問類變量
print(f"共有{dogs.dog_num()}條狗")
#類實(shí)例化對(duì)象d1和d2
d1 =dogs('大黃','黃色',20)
#bark()是實(shí)例方法,只能通過實(shí)例名來訪問,不能通過類名來訪問
d1.bark()
d2=dogs('小白','白色',8)
#靜態(tài)方法,不能訪問實(shí)例變量也不能訪問類變量,既可以通過實(shí)例名訪問,也可以通過類名訪問
print(f"大黃和小白一共重{dogs.total_weight([d1,d2])}斤")
print(f"大黃和小白一共重{d2.total_weight([d1,d2])}斤")
