1. 程式人生 > >Python_子類調用父類的方法

Python_子類調用父類的方法

Python Python_子類調用父類的方法

1.方式一
子類調用父類的方法,包含2中形式的調用。一種形式是在類內部通過繼承的方式調用父類的方法,另外一種形式是子類實例化後之後通過繼承的方式來調用父類的方法。如下圖所示:
技術分享圖片
註意一點,在子類內部通過繼承的方式調用父類的屬性時,必須要帶上self位置參數(self只在實例化過程中和在實例調用屬性時才能省略(self本來的含義就是指向實例自己));而實例在通過繼承調用父類的屬性或方法時,則不用傳self參數,因為實例已經實例化了呀!!!
該部分的代碼塊如下:註意一點,在子類內部通過繼承的方式調用父類的屬性時,必須要帶上self位置參數(self只在實例化過程中和在實例調用屬性時才能省略(self本來的含義就是指向實例自己));而實例在通過繼承調用父類的屬性或方法時,則不用傳self參數,因為實例已經實例化了呀!!!

該部分的代碼塊如下:

class Person():
    "人的類"
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex
    def eat(self):
        print("%s開始吃飯了"%self.name)
class Student(Person):
    "學生類"
    def __init__(self,name,age,sex,classnaem):
        #子類調用父類的構造函數進行初始化
        Person.__init__(self,name,age,sex)  #通過子類把參數傳給父類(self不能少,self只有在實例化和實例調用類時才能省略,此處不是)
        self.classnaem = classnaem
    def course(self):
        print("%s在%s上課"%(self.name,self.classnaem))
    def done(self):
        print("這個學生在幹嘛?")
        #子類調用父類方法
        Person.eat(self)    #子類在調用父類方法必須要傳self
#實例化一個子類
student = Student("周明",23,‘男‘,"11屆土木3班")
#調用子類本身的方法
student.course()
#通過子類調用父類的方法--->實例化之後來調用父類的方法
student.eat()
#調用子類的方法,在子類方法中調用了子類的方法,與student.eat有區別
student.done()

此時如果父類的名稱更改了,那麽在子類中所有用到父類名的地方均要進行修改了。所有此種方法不便於後期維護,為此我們選擇方式二。
2.方式二
使用super來代替父類名,以方便代碼的後期維護,見下圖:
技術分享圖片
使用super的好處,一是可以代替父類名,這樣後期父類名更改了,我們只需要更改子類名稱後面的父類名即可,子類中其他的父類名可以不用更改;二是使用了super後,調用父類方法時可以不傳參數self。
該部分的代碼塊為:

class Person():
    "人的類"
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex
    def eat(self):
        print("%s開始吃飯了"%self.name)
class Student(Person):
    "學生類"
    def __init__(self,name,age,sex,classnaem):
        #子類調用父類的構造函數進行初始化
        # Person.__init__(self,name,age,sex)  #通過子類把參數傳給父類(self不能少,self只有在實例化和實例調用類時才能省略,此處不是)
        #使用super來替換父類名
        super().__init__(name,age,sex)  #通過子類把參數傳給父類,用super可以省略self
        self.classnaem = classnaem
    def course(self):
        print("%s在%s上課"%(self.name,self.classnaem))
    def done(self):
        print("這個學生在幹嘛?")
        #子類調用父類方法
        super().eat()    #子類在調用父類方法,使用super可以省略self
#實例化一個子類
student = Student("周明",23,‘男‘,"11屆土木3班")
#調用子類本身的方法
student.course()
#通過子類調用父類的方法--->實例化之後來調用父類的方法
student.eat()
#調用子類的方法,在子類方法中調用了子類的方法,與student.eat有區別
student.done()

Python_子類調用父類的方法