1. 程式人生 > 實用技巧 >方法重寫和鴨子型別

方法重寫和鴨子型別

一、方法重寫

是指子類可以對從父類中繼承過來的方法進行重新定義,從而使得子類物件可以表現出與父類物件不同的行為。 方法重寫示例。
 1 class Person: #定義Person類 
 2     def __init__(self, name): #定義構造方法 
 3         self.name=name #將self物件的name屬性賦為形參name的值 
 4     def PrintInfo(self): #定義PrintInfo方法 
 5         print('姓名:%s'%self.name)
 6 class Student(Person): #
以Person類作為父類定義子類Student 7 def __init__(self, sno, name): #定義構造方法 8 self.sno=sno #將self物件的sno屬性賦為形參sno的值 9 self.name=name #將self物件的name屬性賦為形參name的值 10 def PrintInfo(self): #定義PrintInfo方法 11 print('學號:%s,姓名:%s'%(self.sno,self.name)) 12 def PrintPersonInfo(person): #
定義普通函式PrintPersonInfo 13 print('PrintPersonInfo函式中的輸出結果', end='#') 14 person.PrintInfo() #通過person呼叫PrintInfo方法 15 if __name__=='__main__': 16 p=Person('李曉明') #建立Person類物件p 17 stu=Student('1810100','李曉明') #建立Student類物件stu 18 p.PrintInfo() 19 stu.PrintInfo() 20 PrintPersonInfo(p)
21 PrintPersonInfo(stu)
姓名:李曉明 學號:1810100,姓名:李曉明 PrintPersonInfo函式中的輸出結果#姓名:李曉明 PrintPersonInfo函式中的輸出結果#學號:1810100,姓名:李曉明 提示:多型,是指在執行同樣程式碼的情況下,系統會根據物件實際所屬的類去呼叫相應類中的方法。 二、鴨子型別   在鴨子型別中,關注的不是物件所屬的類,而是一個物件能夠如何使用。   在Python中編寫一個函式,傳遞實參前其引數的型別並不確定,在函式中使用形參進行操作時只要傳入的物件能夠支援該操作程式就能正常執行。 例:鴨子型別示例。
class Person: #定義Person類 
    def CaptureImage(self): #定義CaptureImage方法 
        print('Person類中的CaptureImage方法被呼叫!') 
class Camera: #定義Camera類 
    def CaptureImage(self): #定義CaptureImage方法 
        print('Camera類中的CaptureImage方法被呼叫!')
    def CaptureImageTest(arg): #定義CaptureImageTest方法 
        arg.CaptureImage() #通過arg呼叫CaptureImage方法 
if __name__=='__main__': 
    p=Person() #定義Person類物件p 
    c=Camera() #定義Camera類物件c 
    CaptureImageTest(p) 
    CaptureImageTest(c)
Person類中的CaptureImage方法被呼叫! Camera類中的CaptureImage方法被呼叫! 提示:實際上,Python中的多型也是藉助鴨子型別實現,與C++、Java等語言中的多型並不是同一含義。