Python 繼承 派生 覆蓋 super函式

2021-08-30 08:53:55 字數 3068 閱讀 2665

什麼是繼承/派生

派生就是從乙個已有的類中衍生成新類

繼承是指在衍生出的新類中的物件會擁有原類的屬性和行為

作用: 用繼承派生機制,可以將一些共有功能加在基類中,實現**共享

在不改變基類**的基礎上,改變原有類的功能

名詞: 基類(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...