继承
继承:是类与类之间的关系
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
总结:
经典类的查找属性的方法是深度优先
新式类的查找属性的方法是广度优先