1.為什么使用類
????????一個類(class)可以包囊眾多函數(shù),所以一般使用類的情況下,都需要用到眾多有共性的函數(shù),把這些可能會一起調(diào)用的函數(shù)或者需要接連調(diào)用的函數(shù)歸為一個類,這樣需要使用的時候可以輕易的找到。
????????在處理不同細節(jié)時使用的類區(qū)別開來會使得代碼更加的清晰。特別是像交互彈窗這樣的程序,如果需要做多頁跳轉(zhuǎn),每一頁的布局十分復雜時,使用類會讓寫代碼時的頭腦更加清晰。
2.基本的使用方式舉例
class ha:
def __init__(self,a):
self.hh=a
def qw(self):
print(self.hh**2)
def mm(self):
if self.hh==9:
return 0
ha.qw(ha(3))
?結(jié)果:
9
進程已結(jié)束,退出代碼為 0
????????首先定義一個類,名為ha,然后用init定義所有函數(shù)的共同參數(shù),因為init構(gòu)造函數(shù)是會在調(diào)用整個類時自動運行的,所以不需要主動調(diào)用。如圖,即使沒有主動調(diào)用init函數(shù),也可以將init中的參數(shù)用于qw函數(shù),而mm函數(shù)不會自動調(diào)用
---------------------------------------------------------------------------------------------
3.類的特點,結(jié)構(gòu)
? ? ? ? 1.類中的每個函數(shù)的第一個形參必須一致,通常命名為self,你也可以選擇自己命名更簡單的寫法(但是不規(guī)范)。
? ? ? ? 2.類的第一個函數(shù)通常為init函數(shù),這個函數(shù)為構(gòu)造函數(shù),也是整個類中最特殊的函數(shù),它的主要目的是傳遞其他函數(shù)需要的參數(shù),或者調(diào)用其他函數(shù)也讓他們自動運行。
? ? ? ? 3.構(gòu)造函數(shù)沒有返回值,但是其他函數(shù)可以返回一個值。
? ? ? ? 4.不主動調(diào)用類中的某個非構(gòu)造函數(shù)的函數(shù),則該函數(shù)不會被運行。
? ? ? ? 5.構(gòu)造函數(shù)不是直接將形參傳遞給其他函數(shù),而是定義一個新的,有特定形式的變量來儲存這個形式參數(shù)(如上例self.hh=a,其中self.hh為定義的變量,a為調(diào)用這個類時需要傳入的形參,賦值給self.hh,self.hh可以被直接使用,而a只能在構(gòu)造函數(shù)中使用。? 原因是self是所有函數(shù)的共同屬性,而a只是構(gòu)造函數(shù)中的一個參數(shù)),這個變量可以在其他函數(shù)中直接使用,與global全局變量的方式一致。
? ? ? ?6.定義類時,一般不含有括號(如上例class ha:),也可以使用括號,代表著這個類需要與另一個類共享屬性和參數(shù),即,你可以在這個類中調(diào)用另一個類的函數(shù)。另外,如果使用的是python庫中的類的函數(shù),則可以不需要寫入括號也能調(diào)用。
**********************************************************
類繼承的調(diào)用示例:
class ha:
def __init__(self,a):
self.hh=a
def qw(self,c):
print(self.hh**2)
print(c)
def mm(self):
if self.hh==9:
return 0
class haha(ha):
def __init__(self,a):
self.hh = 15
# super().__init__(a)
print(self.hh)
def aw(self):
self.hh=10
print(self.hh)
haha(a=3).qw(c=2)
先注釋掉super。
在上例的基礎(chǔ)上,增加了haha類,haha類為子類,繼承父類(ha)的屬性和參數(shù)。
也就是說我們可以在haha中調(diào)用ha中除了構(gòu)造函數(shù)的其他的函數(shù)。
?
結(jié)果:
15
225
2
????????我們在haha中調(diào)用qw函數(shù)則需要在haha中傳入a參數(shù),這里a=3,然后向qw傳入c=2。我們先是調(diào)用的haha類,再只調(diào)用ha類中的qw函數(shù),因此先自動執(zhí)行了haha類的構(gòu)造函數(shù),打印了15。再進入qw函數(shù)分別打印15的平方和c(也就是2)。
? ?**********************************************************************************************? ? ?
當我們使用super時,則可以調(diào)用父類的構(gòu)造函數(shù):
class ha:
def __init__(self,a):
self.hh=a
def qw(self,c):
print(self.hh**2)
print(c)
def mm(self):
if self.hh==9:
return 0
class haha(ha):
def __init__(self,a):
self.hh = 15
super().__init__(a)
print(self.hh)
def aw(self):
self.hh=10
print(self.hh)
haha(a=3).qw(c=2)
取消掉注釋,得到結(jié)果:
3
9
2
這里先得到self.hh=15,但是由于調(diào)用了父類的構(gòu)造函數(shù),將15覆蓋為a,a=3,下如上同理。
*******************************************************************************************
為了更方便理解,我們改寫一個變量名:
class ha:
def __init__(self,a):
self.hh=a
def qw(self,c):
print(self.hh**2)
print(c)
def mm(self):
if self.hh==9:
return 0
class haha(ha):
def __init__(self,b):
self.hh = 15
super().__init__(b)
print(self.hh)
def aw(self):
self.hh=10
print(self.hh)
haha(b=3).qw(c=2)
結(jié)果與上一致。因此我們得出結(jié)論:super().__init__(b)是將子類構(gòu)造函的形參b傳遞給父類構(gòu)造函數(shù)的形參a,他們之間是一一對應(yīng)的,所以也要求兩類的形參數(shù)量一致,否則會報錯。
******************************************************************************************?
多個變量傳遞的例子:
class ha:
def __init__(self,a,d):
self.hh=a
print(d)
def qw(self,c):
print(self.hh**2)
print(c)
def mm(self):
if self.hh==9:
return 0
class haha(ha):
def __init__(self,b,e):
self.hh = 15
super().__init__(b,e)
print(self.hh)
def aw(self):
self.hh=10
print(self.hh)
haha(b=3,e=10).qw(c=2)
10
3
9
2
我們再反轉(zhuǎn)e,b的傳入順序:
class ha:
def __init__(self,a,d):
self.hh=a
print(d)
def qw(self,c):
print(self.hh**2)
print(c)
def mm(self):
if self.hh==9:
return 0
class haha(ha):
def __init__(self,b,e):
self.hh = 15
super().__init__(e,b)
print(self.hh)
def aw(self):
self.hh=10
print(self.hh)
haha(b=3,e=10).qw(c=2)
得到:
3
10
100
2
因此上結(jié)論得證(他們之間是一一對應(yīng)的,所以也要求兩類的形參數(shù)量一致,否則會報錯。)。
********************************************************************
4.應(yīng)用到tkinter庫交互彈窗
? ? ? ? 我們假如需要利用到用戶點擊一個按鈕的次數(shù)作為條件,例如點擊3次,或者6次等等,出現(xiàn)一個彈窗那么寫一個類更加方便,因為這個循環(huán)次數(shù)可以被拿出來寫在構(gòu)造函數(shù)中做一個統(tǒng)一歸類。因為個人還沒能力寫比較復雜的交互彈窗,因此這里只淺淺感受一下:
? ? ? ? 部分代碼為:
class qmqm:
def __init__(self):
self.i = 0
self.zujian()
def zujian(self):
global b
def dw():
if self.i<=2:
self.i+=1
messagebox.showinfo(title='中計了吧',message="送你一朵花,欠款*%d" %self.i)
else:
messagebox.showinfo(title='夠了',message='你已經(jīng)還不起了,別在點了')
? ? ? ? 我們將循環(huán)次數(shù)i放進構(gòu)造函數(shù)中,如果未來需要調(diào)用,則可以在其他類中用super類調(diào)用父類構(gòu)造函數(shù)取得i的值。達成彈窗:文章來源:http://www.zghlxwxcb.cn/news/detail-834807.html
2月7日文章來源地址http://www.zghlxwxcb.cn/news/detail-834807.html
到了這里,關(guān)于python類(class)的定義、使用、繼承、應(yīng)用的通俗易懂理解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!