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

继承与派生知识点

时间:2019-10-11 00:23:18      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:情况下   派生类   区分   多个   语言   继承   __init__   基类   集成   

派生与继承

继承(组合)

继承指的是新建类的方法,新建的类称之为子类或者派生类

子类继承的类叫做父类,也称之为基类或者超类

特征:(面试

子类可以继承父类的属性(特征或者技能),并且可以派生出自己的属性(特征与技能)

注:在Python中,一个子类可以继承多个父类,其他语言只能一个子类继承一个父类

继承的目的:

为了减少代码的冗余度

继承实现的方法:

1: 首先确定谁是子类,谁是父类

2 在定义时,子类(父类),实现继承

如何寻找继承关系:

先抽象,再继承

抽象:抽取相似的部分,称之为抽象

继承的关系:对象是特征和技能的结合体;

? 类是一系列对象相同特征和技能的结合体;

? 继承是一系列类相同特征和技能的结合体。

继承背景下,对象属性的查找顺序:

1 对象查找顺序会先从对象的名称空间中查找

2 对象里面没有,则再去类中

3 若当前类是子类,并且类中没有对象需要找的属性,再去父类查找

注:对象查找属性,孺子雷友,不管父类有没有,以子类的为准

派生

派生指的是子类继承父类的属性,并且派生出新的属性。

子类派生出新的属性,若是与父类的属性相同,则以子类为准;

集成式谁与谁的关系,指的是类与类的关系,子类与父类是从属关系。

子类派生出新的属性并且重用父类的属性:

父类:

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

方式一:直接通过父类调用__ init __ ,把 __ init __当做普通函数调用,传入对象与集成的属性

class OldboyTeacher(OldboyPeople):
    # 等级, 薪资
    def __init__(self, name, age, sex, level, sal):
        OldboyPeople.__init__(self, name, age, sex)
        self.level = level
        self.sal = sal


class OldboyStudent(OldboyPeople):
    # 课程
    def __init__(self, name, age, sex, course):
        OldboyPeople.__init__(self, name, age, sex)
        self.course = course

    def choose_course(self):
        print(f'学生{self.name}选择课程{self.course}')

方式二:super是一个特殊的类,在子类中调用super()会得到一个特殊的保护对象,通过“.”指向命名空间

class OldboyTeacher(OldboyPeople):
    # 等级, 薪资
    def __init__(self, name, age, sex, level, sal):
        super().__init__(name, age, sex)
        self.level = level
        self.sal = sal


class OldboyStudent(OldboyPeople):
    # 课程
    def __init__(self, name, age, sex, course):
        super().__init__(name, age, sex)
        self.course = course

    def choose_course(self):
        print(f'学生{self.name}选择课程{self.course}')

新式类与经典类(面试):

在Python2 中才有经典类与新式类的区分

在Python3中,所有的类都是新式类

新式类:

继承object的类,称之为新式类

Python3中,子类不继承自定义的类!他只默认继承继承object

经典类:

在Python2 中,凡是没有继承object的类,都是经典类

“”“

mro():属于object——》type的函数,用来查看当前类的及策划那个顺序,再多继承的情况下

class C(A, B):
    # print('C...')
    # x = 1
    pass

print(C.mro())

”“”

钻石继承:(面试)

钻石继承也称为菱形继承。

再多继承的情况下形成的钻石继承(继承顺序):

? 经典类:深度优先
技术图片

? 新式类:广度优先
技术图片

继承与派生知识点

标签:情况下   派生类   区分   多个   语言   继承   __init__   基类   集成   

原文地址:https://www.cnblogs.com/justztz/p/11651469.html

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