继承与派生

Posted xiamenghan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了继承与派生相关的知识,希望对你有一定的参考价值。

继承

1.什么是继承?

  在程序中继承是一种新建子类的方式 新创建的类称之为之类派生类 被继承的类称之为父类基类超类

2.为何要用继承?

  减少类与类之间代码冗余的问题

3.如何继承?

  先抽象再继承

 

python中继承的特点分为单继承和多继承

class Parent:
    pass

class Parent2:
    pass
   
class Sub1(Parent):
    pass
    #单继承

class Sub2(Parent,Parent2):
    pass
    #多继承

python2和python3在继承上的区别

新式类:但凡继承object类的子类,以及该子类的子子类....都称为新式类

经典类:没有继承object类的子类,以及该子类的子子类....都称为经典类

 

只有python2中才区分新式类与经典类

 

 

派生

在子类派生出的新功能中如何重用父类的功能:

方式一:指名道姓地访问某一个类中的函数 与继承无关

 

class People:
    def __init__(self,name,age):
        self.name=name
        self.age = age

class Student(People):
    def __init__(self,name,age,num):
        People.__init__(self,name,age)
        self.num = num

 

 

 

方式二:super 在python3中super不传参数,调用该函数会得到一个特殊的对象,该对象是专门用来访问父类中的属性的

    强调:super会严格参照类的mro列表依次查找属性

class People:
    def __init__(self,age,name):
        self.age=age
        self.name=name
    
class Teacher(People):
    def __init__(self,age,name,salary):
        super(Teacher,self).__init__(age,name)
        self.salary = salary

 

 

属性的查找:

1.在单继承背景中,无论是新式类还是经典类属性查找顺序都一样

先obj->类->父类......

2.在多继承背景下,如果一个子类继承了多个分支,但是多个分支没有汇聚到一个非object类,无论是新式类还是经典类属性查找顺序都一样

会按照从左到右的顺序一个分支一个分支的查找下去

3.在多继承背景下,如果一个子类继承了多个分支,但是多个分支最终汇聚到一个非object类

新式类:广度优先查找

经典类:深度优先查找

 


以上是关于继承与派生的主要内容,如果未能解决你的问题,请参考以下文章

继承与派生

继承与派生

类的继承与派生

面向对象之继承与派生

类的继承与派生

继承与派生知识点