什麼是繼承/派生
派生就是從乙個已有的類中衍生成新類
繼承是指在衍生出的新類中的物件會擁有原類的屬性和行為
作用: 用繼承派生機制,可以將一些共有功能加在基類中,實現**共享
在不改變基類**的基礎上,改變原有類的功能
名詞: 基類(base class)/超類(super class)父類(father class)
派生類(derived class)/子類(child class)
語法:
class 類名(基類名):
語句塊說明: 單繼承是指派生類由乙個基類衍生出來的類
class human:
def say(self,what):
print('say',what)
def walk(self,distance):
print('走了',distance,'公里')
class student(human): #(human)後加的
# def say(self,what):
# print('說',what)
# def walk(self,distance):
# print('走了',distance,'公里')
def study(self,subiect):
print('學習',subiect)
h1=human()
h1.say('天亮了')
h1.walk(5)
print('...............................')
s1=student()
s1.walk(4)
s1.say('感覺有點累')
s1.study('物件導向')
**繼承說明:**
python3中任何類都直接或間接地繼承自object類
object類是一切類的超類
類的__base__屬性
__base__屬性用來記錄此類的基類
python內建類的繼承關係
>>>help(__butltins__)
覆蓋是指在有繼承關係的類中,子類中實現了與基類同名的方法,在子類的實
例呼叫該方法時,實際呼叫的是子類的覆蓋版本,這種現象叫做覆蓋
作用:實現和父類同名,但功能不同的方法
示例:class a:
def work(self):
print('a.work被呼叫')
class b(a):
def work(self):
'''此方法會覆蓋父類中同名的方法'''
print('b.work被呼叫')
b=b()
b.work()
**問題:**
當覆蓋發生時,如何呼叫父類的被覆蓋方法
此例項示意顯示呼叫父類的顯式方法:
class a: -\
def work(self): \
print('a.work被呼叫') \
class b(a): \
def work(self): \ 不推薦
'''此方法會覆蓋父類中同名的方法''' / 使用
print('b.work被呼叫') /
pass /
b=b() /
#b.work() /
a.work(b) -/
super(cls,obj)返回繫結超類的例項(要求obj必須是cls類或者cls子類的物件)
super()返回繫結超類的例項,等同於:
super(__class__,例項方法的第乙個引數),必須用在方法內呼叫
作用:借助super()返回的例項間接呼叫父類的覆蓋方法
示例:class a:
def work(self):
print('a.work被呼叫')
class b(a):
def work(self):
'''此方法會覆蓋父類中同名的方法'''
print('b.work被呼叫')
pass
b=b()
super(b,b).work()
super的應用
顯示呼叫基類的初始化方法
當子類中實現了__init__方法,基類的__init__方法
將不會被自動呼叫。如果需要呼叫,則需要用super顯式呼叫
class human:
def __init__(self,n,a):
print('__init__被呼叫' ,n,a)
self.name=n
self.age=a
#顯式呼叫object類的__init__方法
super().__init__()
def infos(self):
print('姓名',self.name)
print('年齡',self.age)
class student(human):
def __init__(self,n,a,s=0):
super().__init__(n,a)
self.score=s
def infos(self):
super().infos()
print('成績',self.score)
h1=student('小李',18)
# h1=human('小張', 20)
h1.infos()
派生與繼承 多重派生
1 理解下面的程式,並在 vc 6.0 下執行檢視結果,回答程式後面的問題。class cbase1 cbase1 void print protected int a class cbase2 cbase2 void print protected int b class cderive publ...
Python 類繼承方法覆蓋
是指有繼承關係的類中 子類中實現了與基類中同名的方法 在子類例項中呼叫該方法時 實際呼叫的是子類中的方法 這種現象稱作覆蓋 也就是實現與父類同名 但是功能不同的方法 可以改變父類方法的功能。定義子類mylist 繼承於list父類 class mylist list pass 例項化 l mylis...
派生和繼承
1.派生類的概念 以物件導向的程式設計的觀點來看,繼承表達的是物件類之間的相互關係。這種關係使得某類物件可以繼承另外一類物件的特徵和能力。如果一類物件繼承了另一類物件的特徵和能力,這個類就叫做所繼承類的派生類。1.1 宣告乙個派生類的一般格式是 class 派生類名 派生方式 public or p...