繼承-python3

"""
繼承

版本: v1.0
日期: 2019.03.27
作者: Catherine
python版本: 3.7
"""

"""
剛纔我們提到了,可以在已有類的基礎上創建新類,
這其中的一種做法就是讓一個類從另一個類那裏將屬性和方法直接繼承下來,
從而減少重複代碼的編寫.提供繼承信息的我們稱之爲父類,也叫超類或基類;
得到繼承信息的我們稱之爲子類,也叫派生類或衍生類.
子類除了繼承父類提供的屬性和方法,還可以定義自己特有的屬性和方法,
所以子類比父類擁有的更多的能力,在實際開發中,我們經常會用子類對象去替換掉一個父類對象,
這是面向對象編程中一個常見的行爲,對應的原則稱之爲里氏替換原則.下面我們先看一個繼承的例子.
"""


class Person(object):
    """人"""
    def __init__(self, name, age):
        self._name = name
        self._age = age

    @property
    def name(self):
        return self._name

    @property
    def age(self):
        return self.age

    @age.setter
    def age(self, age):
        self._age = age

    def play(self):
        print('%s正在愉快的玩耍.' % self._name)

    def watch_tv(self):
        if self._age >= 18:
            print('%s正在觀看《知否知否》.' % self._name)
        else:
            print('%s只能觀看《熊出沒》.' % self._name)


class Student(Person):
    """學生"""
    def __init__(self, name, age, grade):
        super().__init__(name, age)
        self._grade = grade

    @property
    def grade(self):
        return self._grade

    @grade.setter
    def grade(self, grade):
        self._grade = grade

    def study(self, course):
        print('%s的%s正在學習%s.' % (self._grade, self._name, course))


class Teacher(Person):
    """老師"""
    def __init__(self, name, age, title):
        super().__init__(name, age)
        self._title = title

    @property
    def title(self):
        return self._title

    @title.setter
    def title(self, title):
        self._title = title

    def teach(self, course):
        print('%s%s正在講%s.' % (self._name, self._title, course))


def main():
    stu = Student('王大錘', 15, '初三')
    stu.study('數學')
    stu.watch_tv()

    t = Teacher('Catherine', 30, '講師')
    t.teach('Python程序設計')
    t.watch_tv()


if __name__ == '__main__':
    main()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章