徹底搞懂python繼承

Python繼承

  • 繼承是用來實現代碼複用和設計複用的機制,是面向對象程序設計的重要特性之一。設計一個新類時,如果可以繼承一個已有的設計良好的類然後進行二次開發,無疑會大幅度減少開發工作量。
  • 在繼承關係中,已有的、設計好的類稱爲父類或基類,新設計的類稱爲子類或派生類。派生類可以繼承父類的公有成員,但是不能繼承其私有成員。如果需要在派生類中調用基類的方法,可以使用內置函數super()或者通過“基類名.方法名()”的方式來實現這一目的。
  • Python支持多繼承,如果父類中有相同的方法名,而在子類中使用時沒有指定父類名,則Python解釋器將從左向右按順序進行搜索。

在派生類中調用基類方法。

class Person(object): 
    def __init__(self, name='', age=20, sex='man'):
        #通過調用方法進行初始化,這樣可以對參數進行更好地控制
        self.setName(name)
        self.setAge(age)
        self.setSex(sex)

    def setName(self, name):
        if not isinstance(name, str):
            raise Exception('name must be string.')
        self.__name = name

    def setAge(self, age):
        if type(age) != int:
            raise Exception('age must be integer.')
        self.__age = age

    def setSex(self, sex):
        if sex not in ('man', 'woman'):
            raise Exception('sex must be "man" or "woman"')
        self.__sex = sex

    def show(self):
        print(self.__name, self.__age, self.__sex, sep='\n')
#派生類
class Teacher(Person):
    def __init__(self, name='', age=30,
                  sex='man', department='Computer'):
        #調用基類構造方法初始化基類的私有數據成員
        super(Teacher, self).__init__(name, age, sex)
        #也可以這樣初始化基類的私有數據成員
        #Person.__init__(self, name, age, sex)
        #調用自己的方法初始化派生類的數據成員
        self.setDepartment(department)

    #在派生類中新增加的方法
    def setDepartment(self, department):
        if type(department) != str:
            raise Exception('department must be a string.')
        self.__department = department

    #覆蓋了從父類中繼承來的方法
    def show(self):
        #先調用父類的同名方法,顯示從父類中繼承來的數據成員
        super(Teacher, self).show()
        #再顯示派生類中的私有數據成員
        print(self.__department)
if __name__ =='__main__':
    #創建基類對象
    zhangsan = Person('Zhang San', 19, 'man')
    zhangsan.show()
    print('='*30)

    #創建派生類對象
    lisi = Teacher('Li si', 32, 'man', 'Math')
    lisi.show()
    #調用繼承的方法修改年齡
    lisi.setAge(40)
    lisi.show()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章