python中class用法是什么呢?不知道的小伙伴來看看小編今天的分享吧!
1、class的定義及常用稱呼:
類(Class): 用來描述具有相同的屬性和方法的對(duì)象的集合。它定義了該集合中每個(gè)對(duì)象所共有的屬性和方法。
對(duì)象:它是類的實(shí)例化。
方法:指類中定義的函數(shù)。
2、類對(duì)象支持兩種操作:
屬性引用和實(shí)例化。
屬性引用的語法:obj.屬性
類實(shí)例化的語法:obj = 類名()
類中方法的調(diào)用:obj.方法名()
3、舉例:
例1
class student(object): #自定義一個(gè)類student
def speak(self): ## 哪個(gè)對(duì)象調(diào)用了這個(gè)方法,self就是那個(gè)對(duì)象;可以把self理解為一個(gè)形參
print("%s 說:我今年%s歲" % (self.name, self.age))
john = student() #類student 實(shí)例化一個(gè)對(duì)象john
john.name = "約翰" # 給對(duì)象添加屬性
john.age = 19
john.speak() # 調(diào)用類中的 speak()方法
此時(shí)的輸出為
約翰 說:我今年19歲
例2
class student(object): # 定義構(gòu)造方法 有init,有別于自定義類
def __init__(self, n, a): #__init__() 是類的初始化方法;它在類的實(shí)例化操作后 會(huì)自動(dòng)調(diào)用,不需要手動(dòng)調(diào)用;
self.name = n
self.age = a # 設(shè)置屬性
def speak(self): # 定義類中的普通方法
print("%s 說:我今年%s歲" % (self.name, self.age))
john = student("約翰",19) #類student 實(shí)例化一個(gè)對(duì)象john
john.speak() # 調(diào)用類中的 speak()方法
最后的輸出同上個(gè)例子
在python中使用__開頭 并以__結(jié)尾的方法,稱之為魔法方法;
init(self) 是類的初始化方法,也稱構(gòu)造方法,是一種特殊的魔法方法; init(self)在實(shí)例化后,會(huì)自動(dòng)調(diào)用,而不用手動(dòng)調(diào)用,所以一般把屬性設(shè)置在_init__()里;
常用到的魔法方法還有:str(self) 、 del(self)等。
4、類的繼承以及super,self的使用:
子類繼承父類,即子類擁有了父類的屬性和方法。
python中類的初始化都是__init__()。所以父類和子類的初始化方式都是__init__()
但是如果子類初始化時(shí)沒有這個(gè)函數(shù),那么它便調(diào)用父類的__init__();(對(duì)應(yīng)例input1)
如果子類種調(diào)用了父類的init,但自己又定義了自己的init,那么就會(huì)覆蓋父類的初始化函數(shù),只顯示子類自己的初始化。(對(duì)應(yīng)例input2)
input1:
class Animal(object):
def __init__(self):
self.name = "我是父類"
class Panda(Animal):
def __init__(self):
super().__init__() #使用super的方式來顯示調(diào)用父類的__init__()函數(shù)
super(Panda, self).__init__() # 第二種super初始化的方式
if __name__=="__main__":
panda = Panda() #實(shí)例化Panda
print(panda.name)
output1:
我是父類
input2:
class Animal(object):
def __init__(self):
self.name = "我是父類"
class Panda(Animal):
def __init__(self):
super().__init__()
self.name = "panda"
if __name__=="__main__":
panda = Panda()
print(panda.name)
output2:
panda
2. self和super的區(qū)別:
(1) self是首先調(diào)用自身的方法如果自身沒有再去父類中找;super是直接從父類中找方法
(2)self是類(可以理解為形參),super是預(yù)編譯指令
反正要繼承父類,直接上super就ok了
input3:
class Animal(object):
def __init__(self):
self.name = "我是父類"
def A(self): #父類中的A方法
print("父類的A方法")
class Panda(Animal):
def __init__(self):
super().__init__()
self.myname = "panda"
def A(self): #子類中的A方法
print("子類的A方法")
def B(self):
self.A() #self調(diào)用A
super().A() #super調(diào)用A
if __name__=="__main__":
panda = Panda()
panda.B() #通過B函數(shù)來調(diào)用A方法,查看self和super的區(qū)別
output3:
子類的A方法 #我們說過self是先從自身找方法,沒有再去父類找
父類的A方法 #而super則是直接從父類中找
以上就是小編今天的分享了,希望可以幫助到大家。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com