一、什么是繼承
- 繼承是一種新建類的方式,新建的類稱為子類,被繼承的類稱為父類
- 繼承的特性是:子類會遺傳父類的屬性
- 繼承是類與類之間的關系
二、為什么用繼承
使用繼承可以減少代碼的冗余
三、物件的繼承
Python中支持一個類同時繼承多個父類
class Parent1:
pass
class Parent2:
pass
class Sub1(Parent1, Parent2):
pass
使用__bases__方法可以獲取物件繼承的類
print(Sub1.__bases__)
(<class '__main__.Parent1'>, <class '__main__.Parent2'>)
- 在Python3中如果一個類沒有繼承任何類,則默認繼承object類
- 在Python2中如果一個類沒有繼承任何類,不會繼承object類
print(Parent1.__bases__)
(<class 'object'>,)
四、類的分類
后面會詳細解釋類的分類,目前僅做了解
1 新式類
繼承了object的類以及該類的子類,都是新式類
Python3中所有的類都是新式類
2 經典類
沒有繼承object的類以及該類的子類,都是經典類
只有Python2中才有經典類
五、繼承與抽象
繼承描述的是子類與父類之間的關系,是一種什么是什么的關系,要找出這種關系,必須先抽象再繼承,抽象即抽取類似或者說比較像的部分,
抽象分成兩個層次:
- 將奧巴馬和梅西這倆物件比較像的部分抽取成類;
- 將人,豬,狗這三個類比較像的部分抽取成父類,
抽象最主要的作用是劃分類別(可以隔離關注點,降低復雜度),如下圖所示:

繼承:基于抽象的結果,通過編程語言去實作它,肯定是先經歷抽象這個程序,才能通過繼承的方式去表達出抽象的結構,
抽象只是分析和設計的程序中,一個動作或者說一種技巧,通過抽象可以得到類,如下圖所示:

六、繼承的應用
牢記物件是特征與功能的集合體,我們可以拿選課系統舉例
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')
物件查找屬性的順序:物件自己-》物件的類-》父類-》父類,,,
rint(stu1.school)
oldboy
print(tea1.school)
oldboy
print(stu1.__dict__)
{'name': 'tank', 'age': 18, 'gender': 'male'}
#學習中遇到問題沒人解答?小編創建了一個Python學習交流群:711312441
tea1.score(stu1, 99)
nick is scoring
print(stu1.__dict__)
{'name': 'tank', 'age': 18, 'gender': 'male', 'score': 99}
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/545400.html
標籤:Python
上一篇:Python寫一個自動發送直播彈幕的工具,非常好用!
下一篇:Python教程:類的派生
