類的繼承

1、什麼是繼承

  • 繼承是一種新建類的方式,新建的類稱爲子類,被繼承的類稱爲父類編程

  • 繼承的特性是:子類會遺傳父類的屬性編程語言

  • 繼承是類與類之間的關係設計

89-類的繼承-繼承.jpg?x-oss-process=style/watermark

2、爲何用繼承

  • 使用繼承能夠減小代碼的冗餘

3、對象的繼承

  • Python中支持一個類同時繼承多個父類
class Parent1:
    pass


class Parent2:
    pass


class Sub1(Parent1, Parent2):
    pass
  • 使用__bases__方法能夠獲取對象繼承的類
print(Sub1.__bases__)
(<class '__main__.Parent1'>, <class '__main__.Parent2'>)
  • 在Python3中若是一個類沒有繼承任何類,則默認繼承object類code

  • 在Python2中若是一個類沒有繼承任何類,不會繼承object類對象

print(Parent1.__bases__)
(<class 'object'>,)

4、類的分類

  • 後面會詳細解釋類的分類,目前僅作了解

4.1 新式類

  • 繼承了object的類以及該類的子類,都是新式類blog

  • Python3中全部的類都是新式類繼承

4.2 經典類

  • 沒有繼承object的類以及該類的子類,都是經典類it

  • 只有Python2中才有經典類class

5、繼承與抽象

繼承描述的是子類與父類之間的關係,是一種什麼是什麼的關係。要找出這種關係,必須先抽象再繼承,抽象即抽取相似或者說比較像的部分。

抽象分紅兩個層次:

  1. 將奧巴馬和梅西這倆對象比較像的部分抽取成類;

  2. 將人,豬,狗這三個類比較像的部分抽取成父類。

抽象最主要的做用是劃分類別(能夠隔離關注點,下降複雜度),以下圖所示:

89-類的繼承-抽象圖.png?x-oss-process=style/watermark

繼承:基於抽象的結果,經過編程語言去實現它,確定是先經歷抽象這個過程,才能經過繼承的方式去表達出抽象的結構。

抽象只是分析和設計的過程當中,一個動做或者說一種技巧,經過抽象能夠獲得類,以下圖所示:

89-類的繼承-繼承圖.png?x-oss-process=style/watermark

6、繼承的應用

  • 牢記對象是特徵與功能的集合體,咱們能夠拿選課系統舉例
class OldboyPeople:
    """因爲學生和老師都是人,所以人都有姓名、年齡、性別"""
    school = 'oldboy'

    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender


class OldboyStudent(OldboyPeople):
    def choose_course(self):
        print('%s is choosing course' % self.name)


class OldboyTeacher(OldboyPeople):
    def score(self, stu_obj, num):
        print('%s is scoring' % self.name)
        stu_obj.score = num


stu1 = OldboyStudent('tank', 18, 'male')
tea1 = OldboyTeacher('nick', 18, 'male')
  • 對象查找屬性的順序:對象本身-》對象的類-》父類-》父類。。。

89-類的繼承-查找.jpg?x-oss-process=style/watermark

print(stu1.school)
oldboy
print(tea1.school)
oldboy
print(stu1.__dict__)
{'name': 'tank', 'age': 18, 'gender': 'male'}
tea1.score(stu1, 99)
nick is scoring
print(stu1.__dict__)
{'name': 'tank', 'age': 18, 'gender': 'male', 'score': 99}

6.1 屬性查找練習

class Foo:
    def f1(self):
        print('Foo.f1')

    def f2(self):
        print('Foo.f2')
        self.f1()


class Bar(Foo):
    def f1(self):
        print('Bar.f1')


# 對象查找屬性的順序:對象本身-》對象的類-》父類-》父類。。。
obj = Bar()  # self是obj自己,即找到Bar的f1()
obj.f2()
Foo.f2
Bar.f1
相關文章
相關標籤/搜索