物件導向 類的繼承與重用父類屬性或方法

2021-10-24 07:53:25 字數 3366 閱讀 4307

類的繼承

一、類分經典類和新式類

1、在python2中,不帶(object)的是經典類,帶(object)的是新式類

2、在python3中,帶和不帶(object)都是新式類

3、經典類的繼承查詢順序是深度優先

4、新式類的繼承查詢順序是廣度優先

# python3.8.3

classa(

object):

deftest

(self)

:print

('from a'

)class

b(a)

:def

test

(self)

:print

('from b'

)class

c(a)

:def

test

(self)

:print

('from c'

)class

d(b)

:def

test

(self)

:print

('from d'

)class

e(c)

:def

test

(self)

:print

('from e'

)class

f(d,e)

:# def test(self):

# print('from f')

pass

f=f(

)f.test(

)如果f裡面沒有test()功能的時候,會先從父類d裡面查詢,d裡面沒有就去e裡面查詢

f.mro(

)#檢視順序繼承

[<

class

'__main__.f'

>

,<

class

'__main__.d'

>

,<

class

'__main__.b'

>

,<

class

'__main__.e'

>

,<

class

'__main__.c'

>

,<

class

'__main__.a'

>

,<

class

'object'

>

]

重用父類屬性或方法

在子類派生出新的方法中重用父類方法,有兩種實現方式

1、指名道姓(不依賴繼承)

# 指名道姓的方式呼叫父類功能

class

role

:def

__init__

(self, name, hurt, life_value)

: self.name = name

self.hurt = hurt

self.life_value = life_value

defattack

(self, name)

: name.life_value -= self.hurt

class

galen

(role)

: camp =

'de marcia'

def__init__

(self, name, hurt, life_value, weapon)

:# self.name=name

# self.hurt=hurt

# self.life_value=life_value

role.__init__(self, name, hurt, life_value)

#知名道姓,繼承父類功能

self.weapon = weapon

defattack

(self, name)

: role.attack(self, name)

# 子類功能中呼叫父類功能

print

('from galen class'

)

子類功能中呼叫父類的功能

class

role

:def

__init__

(self, name, hurt, life_value)

: self.name = name

self.hurt = hurt

self.life_value = life_value

defattack

(self, name)

: name.life_value -= self.hurt

class

galen

(role)

: camp =

'de marcia'

defattack

(self, name)

: role.attack(self, name)

# 這個就是在子類得功能中呼叫父類功能

print

('from galen class'

)

2、super() (依賴繼承)

class

role

:def

__init__

(self, name, hurt, life_value)

: self.name = name

self.hurt = hurt

self.life_value = life_value

defattack

(self, name)

: name.life_value -= self.hurt

class

galen

(role)

: camp =

'de marcia'

defattack

(self, name)

:# super(galen,self) 括號內第乙個引數是自己的類名 逗號 self(物件),這樣就可以專門引用父類屬性。

super()

.attack(name)

# 繫結方法self就可以不用傳,python3後 super括號內可以不寫,

print

('from galen class'

)

物件導向(三) 例項屬性與類屬性

例項屬性和類屬性 1 概念 2 區別 1 概念上 2 宣告位置 3 訪問方式 4 修改形式 定義學生類,屬性 name,age,gender class student gender 男 類屬性 公共資源 def init self,name,age self.name name self.age ...

Java中 元素的繼承,子類屬性覆蓋父類屬性的例項

子類原始碼 package jason public class subdemo extends basedemo public void accessbase public static void main string args 父類原始碼 package jason public class ...

物件導向 類,屬性,str類 及其特性

物件導向 面向過程 側重於怎麼做 物件導向 側重於誰來做 1.確定職責 要做的事情 方法 2.物件內部封裝不同方法 多個 3.不同物件呼叫不同方法 類 相當於模板,所有的物件都是根據這個模板建立出來的 類只需要有乙個,物件可以有多個 類 屬性 資訊 和方法 你能幹什麼 物件 self,那乙個物件呼叫...