Python中的類(一) 一、 應用場景 如果多個函數中有一些相同的參數時,轉換成面向對象。 二、 如何創建類 類是用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。 Class 類名: Pass 三、 類變數 類變數在整個實例化的對象中是公用的。 ...
Python中的類(一)
一、 應用場景
如果多個函數中有一些相同的參數時,轉換成面向對象。
二、 如何創建類
類是用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。
Class 類名:
Pass
三、 類變數
類變數在整個實例化的對象中是公用的。類變數定義在類中且在函數體之外。類變數通常不作為實例變數使用。
四、 創建類中的方法
方法是類中定義的函數。
1、普通法
Obj = 類名 ()
Obj . 普通方法名
2、設定初始化(構造方法、封裝特性)
由於類可以起到模板的作用,因此,可以在創建實例的時候,把一些我們認為必須綁定的屬性強制填寫進去。通過定義一個特殊的__init__方法,在創建實例的時候,就把name,score等屬性綁上去:
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
註意:特殊方法“init”前後有兩個下劃線!!!
註意到__init__方法的第一個參數永遠是self,表示創建的實例本身,因此,在__init__方法內部,就可以把各種屬性綁定到self,因為self就指向創建的實例本身。
有了__init__方法,在創建實例的時候,就不能傳入空的參數了,必須傳入與__init__方法匹配的參數,但self不需要傳,Python解釋器自己會把實例變數傳進去:
>>> bart = Student('Bart Simpson', 59)
>>> bart.name
'Bart Simpson'
>>> bart.score
59
和普通的函數相比,在類中定義的函數只有一點不同,就是第一個參數永遠是實例變數self,並且,調用時,不用傳遞該參數。除此之外,類的方法和普通函數沒有什麼區別,所以,你仍然可以用預設參數、可變參數、關鍵字參數和命名關鍵字參數。
五、繼承特性
繼承是為了使用父類中的方法。
創建實例:
class Father(): #父類
def f1(self):
print (‘父法一’)
class Son(Father): #子類
def s1(self):
print(‘子法一’)
調用:
- obj=Son()
- obj.s1()
- obj.f1()
#執行結果:子法一
父法一
當子類中的方法名和父類的方法名一致時(重寫父類的某方法),調用該方法時,執行的是子類中的方法。重寫時,還想要執行父類的方法時可以參照以下方法。
class Father(): #父類
def f1(self):
print (‘父法一’)
class Son(Father): #子類
def s1(self):
super(Son,self).f1 #參數:子類名,self
print(‘子法一’)
#調用
- obj=Son()
- obj.s1()
#執行結果:父法一
子法一
也可以按照以下方法寫:
class Father(): #父類
def f1(self):
print (‘父法一’)
class Son(Father): #子類
def s1(self):
Father.f1(self)
print(‘子法一’)
#調用
- obj=Son()
- obj.s1()
多繼承:
當需要一個子類繼承多個父類時,可以參照以下代碼:
class Father1(): #父類一
def f1(self):
print (‘父類一’)
class Father2(): #父類二
def f2(self):
print (‘父類二’)
class Son(Father1,Father2): #子類
def s1(self):
print(‘子法一’)
繼承父類的順序是從左到右繼承。即,當繼承的多個父類中有相同名稱的方法,在調用時會執行左側父類的方法,而右側父類的方法則不會執行。這與執行順序有關。當調用子類時,程式會先從子類的方法中匹配,如果子類中沒有則去符類中依次匹配,父類的匹配順序是從左到右。
當多父類繼承共同繼承一個祖先類,而調用的方法在祖先類時,的查找調用順序如下圖。
當調用父類的方法中又調用了其他方法,則會從子類開始匹配查找該方法。即使,原先的父類中有該方法,也會從子類查找。