日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

面向对象的三大特征之一:继承

發(fā)布時間:2023/12/18 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面向对象的三大特征之一:继承 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

繼承:

面向對象的編程帶來的主要好處之一是代碼的重用,實現(xiàn)這種重用的方法之一是通過繼承機制。繼承完全可以理解成類之間的類型和子類型關系。需要注意的地方:繼承語法???class?派生類名(基類名)://...?? 基類名寫作括號里,基本類是在類定義的時候,在元組之中指明的

從類的的層面上,表示‘’什么‘’是‘’什么“”的關系

class Hero:def __init__(self, name, aggresivity, life):self.Name = nameself.Aggresivity = aggresivityself.Life =lifedef attract(self,enemy):enemy.Life -=self.Aggresivity class Riven(Hero):
camp ='Noxus' class Garen(Hero):
camp
= 'Demacia'

g1=Garen('草叢倫',20,120) r1=Riven('瀟灑哥',30,100)

在該例中,Garen類繼承了Hero類:

用上面的湖來說就是,'Garen是Hero'

?

何時使用繼承:假如我需要定義幾個類,而類與類之間有一些公共的屬性和方法,這時我就可以把相同的屬性和方法作為基類的成員,而特殊的方法及屬性則在本類中定義,這樣只需要繼承基類這個動作,就可以訪問到基類的屬性和方法了,它提高了代碼的可擴展性。

在上面的例子中:把Geren類中的__init__()省略。,通過繼承Hero達到節(jié)省代碼.

繼承:是基于抽象的結果。抽取比較相像的部分(在上面就是對特征的相似,都有名字,生命值,攻擊力)

屬性查找:先從對象的命名空間找》》自己的類的命名空間中找》》》父類中找》》》》

class Foo:def f1(self):print('from Foo.f1')self.f2() #self=b1 self.f2def f2(self):print('from Foo.f2')class Bar(Foo):def f2(self):print('from Bar.f1')b1 = Bar() b1.f1()

結果:

from Foo.f1 from Bar.f1

? 當b1調用f1的時候,發(fā)現(xiàn)自己沒有,同時自己所在的類中也沒有f1(),就在父類Foo中查找,顯然,Foo中有f1()。所以就運行,結果為from Foo.f1。而接著就是運行self.f2(),在b1 中沒有f2(),但是在對象b1所在的類中有f2(),所以運行結果就是from Bar.f2

?

繼承的 實現(xiàn):

對于在繼承過程中,python會計算出一個方法解析順序(MRO)列表,它是一個簡單的所有基類的線性列表>

class Foo:passclass Aor:passclass Bar(Foo,Aor):passprint(Bar.__mro__)

通過__mro__方法可以找出繼承順序:

(<class '__main__.Bar'>, <class '__main__.Foo'>, <class '__main__.Aor'>, <class 'object'>)

MRO列表遵循如下三點:

1.子類優(yōu)先父類被檢查。

2.多個父類會根據(jù)它們在列表中的順序被檢查

3.如果對下一個類存在兩個合法的選擇(遵循2條件)

?

存在多個父類的情況下:

屬性查找方式有:深度優(yōu)先和廣度優(yōu)先。

一般來講,經(jīng)典類在多繼承的情況下會按照深度優(yōu)先的方式查找,新式類會按照廣度優(yōu)先的方式查找.

在python3中都是新式類,因為他們默認繼承object

Bar.__bases__得到父類。

?

在新式類中:

如果,沒有共同的頭部類型

?

查找順序:ClassA>ClassB>ClassC>ClassD>ClassE>ClassF>object

當有共同頭部父類的類型時:

查找順序:ClassA>ClassB>ClassC>ClassE>ClassF>ClassF>ClassG>ClassD>object

?

子類調用父類的方法(內置函數(shù)super):

class People:def __init__(self,name,age,sex):self.name=nameself.age=ageself.sex=sexdef foo(self):print('from parent')class Teacher(People):def __init__(self,name,age,sex,salary,level):#在python3中super().__init__(name,age,sex) #調用父類的__init__的功能,實際上用的是綁定方法,用到了mro表查詢繼承順序,只能調用一個父類的功能#在python2中# super(Teacher,self).__init__(name,age,sex) #super(Teacher,self)是一個死格式self.salary=salaryself.level=leveldef foo(self):super().foo()print('from child')t=Teacher('bob',18,'male',3000,10) print(t.name,t.age,t.sex,t.salary,t.level) t.foo()

?

轉載于:https://www.cnblogs.com/z18271397173/p/9127170.html

總結

以上是生活随笔為你收集整理的面向对象的三大特征之一:继承的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。