zoukankan      html  css  js  c++  java
  • day20

    继承

    • 什么是继承?

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

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

    • 继承的特点:

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

    ​ 继承是类与类之间的关系

    *****(面试问)

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

    • 为什么要继承?
      继承的目的是为了减少代码的冗余(减少重复代码)

    • 如何实现继承?

      首先要确定好谁是子类,谁是父类

      在定义类时,子类+(),()内写父类,实现继承

      使用__bases__方法可以获取对象继承的类

    • 在python3中如果一个类没有继承任何类,则默认继承object类

    • 在python2中如果一个类没有继承任何类,不会继承object类

    寻找继承关系

    • 如何寻找继承关系?

    ​ 要想寻找继承关系,首先要“先抽象,再继承”

    • 什么是抽象?

    ​ 抽象指的是抽取相似的部分,称之为抽象

    ​ 先抽象(抽象思想)再继承(在程序中)

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

    ​ 类时一系列对象相同的特征与技能的结合体

    ​ 继承是一系列类相同的特征与技能的结合体

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

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

    1. 对象查找属性会先从对象的名称空间中查找
    2. 若对象没有,则会取类里面找
    3. 若当前类是子类,并且没有对象找的属性,会去父类中查找

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

    派生

    什么是派生?

    ​ 子类中记住子类在新定义的属性的这个过程叫做派生,并且需要记住子类在使用派生的属性时始终以自己的为准

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

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

    ​ 继承是谁与谁的关系,指的是类与类的关系,子类与父类是从属关系

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

    问题:子类继承父类的__init__毫无意义

    解决:

    解决的方式有两种:

    方式一:

    ​ 直接通过父类"."(调用)__init____init__当做普通的函数使用,传入对象与继承的属性

    方式二:

    ​ super

    ​ 严格以来继承属性查找关系

    ​ super()会得到一个特殊的对象,该对象就是专门用来访问父类中的属性的(按照继承的关系)

    ​ super().__init__(不用为self传值)

    ​ super()的完整用法是super(自己的类名,self),在python2中需要写完整,在python3中可以简写为super()

    新式类和经典类

    新式类:

    ​ 继承了object的类以及该类的子类,都是新式类

    ​ python3中所有的类都是新式类,子类不继承自定义的类,默认继承object

    经典类:

    ​ 没有继承object的类以及该类的子类,都是经典类

    ​ 只有python2中才有经典类

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

    菱形继承

    钻石继承也可以称之为菱形继承.(了解)面试可能会问

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

    ​ 经典类

    ​ 深度优先

    ​ 一条路走到黑,深度优先

    ​ 新式类

    ​ 广度优先

    通过继承实现修改json模块数据类型

    import json
    from datetime import date,datetime
    print(json.JSONEncoder)
    print(datetime.today())#当前时间
    print(date.today())#当前日期
    class MyJson(json.JSONEncoder):
        def default(self, o):
            #子类派生的功能
            #判断o是否datetime的一个实例
            if isinstance(o,datetime):
                return o.strftime('%Y-%m-%d %X')
            elif isinstance(o,date):
                return o.strftime('%Y-%m-%d')
            else:
                #继承父类的default方法的功能
                return super().default(self,o)
    dict1 = {
        'name':'tank',
        'today':datetime.today(),
        'today2':date.today()
    }
    res = json.dumps(dict1,cls=MyJson)#cls=None,默认指向的时原json的JSONEncoder
    print(res)
    
  • 相关阅读:
    pip换国内源
    docker build 的 cache 机制
    jenkins 修改log路径
    lsb_release: command not found 解决
    Linux 添加开机启动项的三种方法
    FAT AP v200R005 配置二层透明模式(web&命令行,开局)
    SharePoint 2010 文档管理系列之星级评论功能
    SharePoint 2010 文档管理之过期归档工具
    SharePoint 2010 文档管理系列之文档搜索
    SharePoint 2010 文档管理系列之准备篇
  • 原文地址:https://www.cnblogs.com/gfhh/p/11648520.html
Copyright © 2011-2022 走看看