繼承||派生||繼承實現原理
阿新 • • 發佈:2018-03-17
foo 顯示 elf 圖片 pytho 關系 pre rom init
繼承
繼承:是類與類之間的關系
class ParentClass1: # 父類,基類,超生類 pass class ParentClasss2: pass class SubClass1(ParentClass1): #子類,派生類 pass class SubClass2(ParentClass1,ParentClasss2): pass # print(SubClass1.__bases__) #查看所繼承的父類 # print(SubClass2.__bases__)
屬性查找聯系
#在查找屬性的時候,顯示從對象裏面尋找,之後去類中尋找,最後去父類中尋找class Foo: def f1(self): print("from Foo.f1") def f2(self): print("from Foo.f2") self.f1() # b.f1() class Bar(Foo): def f1(self): print("frm Bar.f1") b = Bar() b.f2()
派生
#派生:在查找屬性的時候,顯示從對象裏面尋找,之後去類中尋找,最後去父類中尋找 class Hero: def __init__(self,name,damage,zing): self.name= name self.damage = damage self.zing = zing def attack(self,enemy): enemy.zing -= self.damage class Yang(Hero): def attack(self,enemy): print("from Yang Class") pass class Lin(Hero): pass g1 = Yang(‘楊學偉‘,10,100) r1 = Lin(‘林書行‘,100,200) g1.attack(r1)
繼承的實現原理
python2中類主要分為兩種
- 新式類
- 經典類
在python2中經典類:只要沒有繼承object的類,以及其他的子類都成為經典類
class Foo: pass class Bar(Foo): pass
在python2中新式類:只要繼承object的類,以及其他的子類都成為新式類
class Foo(object): pass class Bar(Foo): pass
python3中的類只有一種新式類
#在python3中=》新式類:一個類沒有繼承object的類,默認就繼承object class Foo: pass print(Foo.__bases__)
驗證多繼承下的屬性查找
class A: def test(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-D-B-E-C-A
總結:
經典類的查找屬性的方法是深度優先
新式類的查找屬性的方法是廣度優先
繼承||派生||繼承實現原理