面向對象的特征——繼承的意義和操作過程

繼承

??????? 一個類型繼承另一個類型,當前類型就會擁有另一個類型的公共的屬性和方法,達到代碼的重復使用的目的。

繼承的語法:

class 類型(被繼承的類型):

????????? pass

繼承中出現(xiàn)的術語:

父類:被繼承的類,也稱為基類、超類

子類:當前類,也稱為派生類

子類繼承父類,體現(xiàn)的時A is a B的關系

子類繼承父類,就可以使用父類中所有的公開的屬性和方法

class God(object):

????????? def __init__(self,name):

?????????????????????? self.name = name

????????? def eat(self):

?????????????????????? print("風餐露宿")

class LZS(God):

???????????def drink(self):

????????????????????? print("喝酒")

g = God("天篷")

#g.drink()

g.eat()

l = LZS("魯智深")

l.eat()

l.drink()

繼承鏈

A繼承B,B繼承C,C繼承D

A直接繼承了B,間接繼承了C,D;此時A創(chuàng)建的對象,可以同時使用B,C,D中所有公開的屬性和方法

class A:

?????? def eat(self):

?????????????? print("吃飯1236")

class B(A):

??????? def play(self):

?????????????? print("玩兒123456789")

class C(B):

??????? def sleep(self):

??????????????? print("睡12345678")

class D(C):

pass

d = D()

d.eat()

d.sleep()

d.play()


多繼承

python中,一個類型,可以同時繼承多個類型,同時擁有所有繼承類型的所有公開的屬性和方法

備注:在進行代碼設計的過程中,可能會出現(xiàn)多繼承,所以盡量不要在父類中定義相同名稱的屬性或者方法

備注2:如果父類中出現(xiàn)了相同名稱的屬性和方法,在使用的時候子類調用時會優(yōu)先繼承優(yōu)先調用。

# 定義一個基礎類

class Person(object):

??????????def __init__(self, name):

?????????????????????? self.name = name

class Student(Person):

????????? def eat(self):

????????????????????? print("吃食堂12345678")

??????????def respect(self):

???????????????????? print("尊師重道")

class Son(Person):

?????????? def eat(self):

???????????????????? print("吃大餐。。。。。。。。")

????????? def fealty(self):

???????????????????? print("尊老愛幼")

class User(Student,Son):

????????? pass

u = User("qwertyui")

u.respect()

u.fealty()

# 吃飯

# 如果繼承的多個父類中,出現(xiàn)了相同的屬性和方法,就會執(zhí)行方法或屬性的搜索

# 過程,搜索到對應的屬性和方法,立即執(zhí)行,中斷搜索

# 屬性和方法的搜索過程,可以通過 類型.__mro__魔法屬性查看

# 優(yōu)先繼承,優(yōu)先執(zhí)行

u.eat()

print(User.__mro__)

方法重寫:

子類在自己類中重新定義父類中已經存在的方法,在執(zhí)行該方法時,如果子類中沒有重寫就直接調用父類的方法,如果子類重寫了該方法,就直接調用子類重寫的方法!

擴展:子類中,訪問父類的屬性和方法:

class User(Person):

def __init__(self, name, age):

# 直接通過父類的類名稱調用父類的屬性和方法

Person.__init__(name, age)

# 通過super()來調用父類的屬性和方法

super().__init__(name, age)

'''

方法重載:偽方法重載~出現(xiàn)在一個類的不用函數(shù)

方法重寫:子類中,重新定義父類已經存在的方法

子類-父類,兩個實現(xiàn)了繼承關系的類型,才會有方法重寫

如果方法進行了重寫,在子類對象執(zhí)行這個方法時優(yōu)先執(zhí)行重寫的方法

如果子類沒有重寫這個方法,在執(zhí)行時就會執(zhí)行從父類繼過來的方法

'''

class Person(object):

?????? def eat(self,food):

????????????????? print("吃11111111%s" % food)

class Man(Person):

????????def eat(self,food):

??????????????? print("吃222222222%s" % food)

p = Person()

p.eat("紅燒肉")

m = Man()

m.eat("烤鴨")

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容