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