1.什么是继承?(python2与python3)
在程序中继承是一种新建子类的方式,新创建的类称之为子类派生类,被继承
的类称之为父类基类超类
继承描述的是一种遗传关系,儿子可以重用爹的属性
在python中继承的特点? 单继承&多继承
python2与python3在继承上的区别
新式类:但凡继承object类的子类,以及该子类的子子类,...都称之为新式类
经典类:没有继承object类的子类,以及该子类的子子类,...都称之为经典类
只有在python2中才会区分新式类和经典类
2.为何用继承
减少类与类代码冗余的问题
3.如何继承
先抽象再继承
#在python中继承的特点? 单继承&多继承
4.属性查找顺序
在单继承背景下,无论式新式类还是经典类属性查找顺序都一样。
先object类下,一层一层重类到父类中一次查找
class Foo:
def f1:
print("foo f1")
def f2:
print("foo f2")
f1()
class car(Foo):
def f1 :
print("car f1")
rep=car()
rep.f2
######"foo f2" "car f1"
在多继承背景下,如果一个子类继承了多个分支,但是多个分支没有汇聚到一
个object类, 会按照从左到右的顺序一个分支一个分支的查找下去
在多继承背景下(菱形继承)
新式类:广度优先查找,最后找到子类相对的父类
obj->a->b->e->c->f->d->g
仅在新式类中存在a.mro(),相当于根据算法把查找顺序集合成列表
经典类:深度优先查找,第一个分支直接找到子类相对的父类
obj->a->b->e->g->c->f->d
5.派生:在子类中定义自己的属性,如果与父类的属性重名,那么就以自己的为准
再子类派生出的性属性中如何让重用父类功能的两种方式
方式一:指名道姓的访问某一个类中的函数,与继承无关
方式二:super方法内置函数super(父级,self)py3中不需要传参,调用该函数会得到一个特殊的对象,该对象是专门用来
访问父类中属性的。强调:super会严格按照当前类的mro列表依次查找属性。
class A:
def test(self):
print("A。test")
super().test()
class B:
def test(self):
print("from B")
class C(A,B):
pass
c=C()
c.test()
####### A.test from B