zoukankan      html  css  js  c++  java
  • day_20

    回顾

    面向对象编程

    核心是‘对象’, 对象指的是特征与技能的结合体

    基于该编程思想鞋程序,就好比在创造世界,一种上帝式的思维方式

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

    定义类是发生的事情:

    1. 会产生一个空的名称空间
    2. 会把类内部所有名字扔进名称空间
    3. 会执行类内部的代码

    调用类时发生的事情:

    1. 会产生一个空的对象
    2. 会自动触发__init__
    3. 会将对象与括号内的参数一同传给__init__

    注意:调用类的过程称之为类的实例化,产生的对象称之为类的一个实例

    __init_:在类内部创建的,会在调用类时触发该方法

    对象的绑定方法特殊之处

    1. 由类来调用类内部的函数,该函数只是一个普通的函数, 函数需要接收几个参数就得传几个.

    2. 由对象来调用类内部的函数,该函数称之为对象的绑定方法, 会将不同的对象绑定给不同的方法,特殊之处是会将对象当作第一个参数传给该方法.

    一切皆对象

    在python中,一切皆对象. 指的是通过 type()查看,若返回的是的都是对象. 例如: python的8大数据类型.

    今日内容

    面向对象阶段最重要的知识点:

    三大特性:

    1. 继承
    2. 封装
    3. 多态

    继承

    什么是继承

    继承指的是新建类的方法,新建的类称之为子类或者派生类,子类继承的类叫父类,也称之为基类或超类

    继承的特征

    子类可以继承父类的属性,并且可以派生出自己的属性

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

    为什么要继承

    继承的目的是为了减少代码冗余

    如何实现继承

    1. 首先要确定好谁是子类,谁是父类
    2. 在定义类时,子类+(),()内些父类,实现继承
    class foo:
        xxx=111
    	pass
    class soo(foo):
        pass
    

    查看继承的父类

    __bases__,是类的属性,用来查看当前类的父类

    寻找继承关系

    先抽象,再继承

    什么是抽象

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

    继承的关系

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

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

    对象的名称空间——类——父类

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

    查看对象名称空间

    __class_:对象的属性,查看当前对象的类

    派生

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

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

    解决方式:

    方式一

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

    方式二

    super是一个特殊的类,在子类中调用super()会得到一个特殊的对象,通过“.”指向的是父类的名称空间

    class OldboyPeople:
        def __init__(self, name, age, sex):
            self.name = name
            self.age = age
            self.sex = sex
    
    
    #方式一:
    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}')
            
            
    # 方式二:
    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的函数,用来查看当前类的继承顺序,在多继承的情况下

    钻石继承

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

    • 经典类:

      ​ 深度优先

    • 新式类

      ​ 广度优先

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

    #开发者的角度: 直接转成str
    dict1 = {
        'name': 'tank',
        'today': str(datetime.today()),
        'today2': str(date.today())
    }
    
    res = json.dumps(dict1)
    print(res)
    

    isinstance:

    python内置的函数,可以传两个参数,判断参数一是否是参数二的一个实例

    # 开源者的角度: 修改json源码
    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)
    
  • 相关阅读:
    计算机漏洞安全相关的概念POC 、EXP 、VUL 、CVE 、0DAY
    开始使用kali的一些小问题:菜鸟瞎折腾
    nmap参数详解(罗列一下)
    安装kali之后必做的几件小事
    Debian下virtualBox增强功能出错
    ArcGIS Engine 基础功能(一)
    sublime 配置简单的python环境
    解决 ‘Could not fetch URL https://pypi.python.org’的问题
    golang基础语法学习
    大象盒子技术栈
  • 原文地址:https://www.cnblogs.com/maqiaobin/p/11648225.html
Copyright © 2011-2022 走看看