码迷,mamicode.com
首页 > 其他好文 > 详细

继承与派生

时间:2018-10-23 23:01:17      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:python3   深度   背景   font   __init__   people   pre   函数   str   

继承

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类

新式类:广度优先查找

经典类:深度优先查找

 

继承与派生

标签:python3   深度   背景   font   __init__   people   pre   函数   str   

原文地址:https://www.cnblogs.com/xiamenghan/p/9839381.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!