Python3筆記039 - 7.5 繼承
阿新 • • 發佈:2020-07-23
第7章 面向物件程式設計
- 7.1 面向物件概述
- 7.2 類的定義
- 7.3 類的例項化
- 7.4 訪問限制
- 7.5 繼承
- 7.6 封裝
- 7.7 多型
- 7.8 裝飾器
- 7.9 特殊方法
7.5 繼承
我們每一個人都從祖輩和父母那裡繼承了一些體貌特徵,但是每個人卻又不同於父母,因為每個人都存在自己的一些特性,這些特性是獨有的,在父母身上並沒有體現。
class ClassName(baseclasslist): '''類的幫助資訊''' statement 引數說明 baseclasslist:要繼承的基類,可以有多個,用逗號分隔,不指定,將繼承object類 baseclasslist稱為基類或父類,ClassName稱為派生類或子類
# 單繼承例項:子類Student繼承父類People # 父類定義 class People: def __init__(self, name, age): self.name = name self.age = age def speak(self): print("%s 說: 我 %d 歲。" % (self.name, self.age)) # 子類定義,既沒定義屬性也沒定義方法 class Student(People): # People父類名,Student是子類名 pass s = Student('John', 10) # Student類例項化 s.speak() # 呼叫父類的speak方法 output: John 說: 我 10 歲。
python 3的繼承機制
-
子類在呼叫某個方法或變數的時候,首先在自己內部查詢,如果沒有找到,則開始根據繼承機制在父類裡查詢。
-
根據父類定義的順序,以深度優先的方式逐一查詢父類,Python會從左至右搜尋父類中是否包含該方法。一旦查詢到則直接呼叫,後面不再繼續查詢。!
# 多繼承例項: class People: def __init__(self, name, age): self.name = name self.age = age def speak(self): print("People類的speak方法") class Teacher: def __init__(self, grade): # 呼叫父類的例項化方法 self.grade = grade def speak(self): print("Teacher類的speak方法") class Student(People, Teacher): def __init__(self, name, age, grade, sex): # 呼叫父類的例項化方法 People.__init__(self, name, age) Teacher.__init__(self, grade) self.sex = sex def speak(self): print(self.name, self.age, self.grade, self.sex) s = Student('John', 10, 30, "male") s.speak() output: John 10 30 male
# 拓展:所有物件之根,object就所有類的祖先,都預設繼承object類
o = object()
print(type(o))
output:
<class 'object'>
# 拓展:父子關係鑑定
# 父類定義
class People(object): # object是父類名,People是子類名
pass
# 子類定義
class Student(People): # People父類名,Student是子類名
pass
print(issubclass(Student, People))
print(issubclass(People, object))
output:
True
True