昨日内容

面对对象编程

核心是'对象'',对象指的是特征和技能结合体

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

优点:可扩展性高

缺点:编写程序的复杂性远高于面对思想

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

定义类时发生的事情

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

调用类时发生的事情

  1. 会产生一个空的对象

  2. 自动触发init

  3. 将对象和括号内的参数一并传给init

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

init

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

对象

特征和技能的结合体

对象查找类的属性的顺序

  1. 对象的名称空间
  2. 类的名称空间

对象的绑定方法

  1. 由类调用类内部的函数,该函数只是一个普通的函数
  2. 有对象来调用类内部的函数,该函数就叫对象的绑定方法
  3. 对象的绑定方法,会将对象当作第一个参数传给该方法

python中万物皆对象

今日内容

继承

什么是继承

  1. 继承指的是新建类的方式

  2. 新建的类称之为子类/派生类,子类继承的类叫做父类/基类/超类

  3. 继承的特征

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

  4. 注意:在python中,一个子类可以有多个父类,其他语言子类只有一个父类

为什么要继承

为了减少代码的冗余

如何实现继承

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

# 父类
class ParentClass1:
    pass

class ParentClass2:
    pass

# 子类
class SubClass1(ParentClass1):
    pass

# 继承多个父类
class SubClass2(ParentClass1, ParentClass2):
    pass

如何寻找继承关系

’‘先抽象再继承‘‘

  1. 先抽象

    抽取相似的部分

    []

  2. 再继承

    基于抽象的结果,通过编程语言去实现

  • 继承的关系

    对象是特征与技能的结合体

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

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

继承里对象属性的查找顺序

  1. 对象名称空间
  2. 子类
  3. 父类
  4. 报错

派生

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

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

  • 继承是类与类的关系,子类和父类是从属关系

调用方式

  1. 父类调用

    直接通过父类.__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}')
    
    
  2. super

    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}')

注意:两种方式不要混合使用

类的分类(了解)

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

新式类

  1. 继承object的类以及其子类就叫新式类
  2. python3中所有的类默认继承object类,即所有类都是新式类

经典类

  1. 没有继承object的类以及其子类,就叫经典类
  2. 只有python2中才有经典类

钻石继承(菱形继承)(了解)

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

  1. 经典类

    深度优先

  2. 新式类

    广度优先

## 继承修改json模块数据类型(拓展)

  • isinstance

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

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)

继承+派生+分类+钻石继承(day20)的更多相关文章

  1. Day 23 类的继承,派生,组合,菱形继承,多态与多态性

    类的继承 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类 继承的特性是:子类会遗传父类的属性 继承是类与类之间的关系 为什么用继承 使用继承可以减少代码的冗余 对象的继承 python中 ...

  2. C++:钻石继承与虚继承

    QUESTION:什么是钻石继承? ANSWER:假设我们已经有了两个类Father1和Father2,他们都是类GrandFather的子类.现在又有一个新类Son,这个新类通过多继承机制对类Fat ...

  3. 深入super,看Python如何解决钻石继承难题 【转】

    原文地址 http://www.cnblogs.com/testview/p/4651198.html 1.   Python的继承以及调用父类成员 python子类调用父类成员有2种方法,分别是普通 ...

  4. 深入super,看Python如何解决钻石继承难题

    1.   Python的继承以及调用父类成员 python子类调用父类成员有2种方法,分别是普通方法和super方法 假设Base是基类 class Base(object): def __init_ ...

  5. C++_day8_ 多重继承、钻石继承和虚继承

    1.继承的复习 1.1 类型转换 编译器认为访问范围缩小是安全的. 1.2 子类的构造与析构 子类中对基类构造函数初始化只能写在初始化表里,不能写在函数体中. 阻断继承. 1.3 子类的拷贝构造与拷贝 ...

  6. (转载)深入super,看Python如何解决钻石继承难题

    1.   Python的继承以及调用父类成员 python子类调用父类成员有2种方法,分别是普通方法和super方法 假设Base是基类 class Base(object): def __init_ ...

  7. python 全栈开发,Day20(object类,继承与派生,super方法,钻石继承)

    先来讲一个例子 老师有生日,怎么组合呢? class Birthday: # 生日 def __init__(self,year,month,day): self.year = year self.m ...

  8. 4-13 object类,继承和派生( super) ,钻石继承方法

    1,object 类 object class A: ''' 这是一个类 ''' pass a = A() print(A.__dict__) # 双下方法 魔术方法 创建一个空对象 调用init方法 ...

  9. C++//菱形继承 //俩个派生类继承同一个基类 //又有某个类同时继承俩个派生类 //成为 菱形继承 或者 钻石 继承//+解决

    1 //菱形继承 2 //俩个派生类继承同一个基类 3 //又有某个类同时继承俩个派生类 4 //成为 菱形继承 或者 钻石 继承 5 6 #include <iostream> 7 #i ...

随机推荐

  1. 【译】Kubernetes监控实践(2):可行监控方案之Prometheus和Sensu

    本文介绍两个可行的K8s监控方案:Prometheus和Sensu.两个方案都能全面提供系统级的监控数据,帮助开发人员跟踪K8s关键组件的性能.定位故障.接收预警. 拓展阅读:Kubernetes监控 ...

  2. C#深入学习笔记 - 可空类型与构造函数默认参数

    在实际开发中或许可能会遇到某个属性需要提供一个默认参数,如果该参数是引用类型的话,可以通过 使用 null 来表示未知的值,但如果是int或 其他值类型的话就有点不好办了,因为如果需要一个int或fl ...

  3. Unity项目 - DeathtrapDungeon死亡地牢

    目录 游戏原型 项目演示 绘图资源 代码实现 注意事项 技术探讨 参考来源 游戏原型 死亡地牢是一款 2D-Roguelike 的地牢冒险游戏.手握利刃,斩杀怪物,在凶险的地牢内生存下去.但注意,敌人 ...

  4. selenium-04-验证码问题

    对于web应用来说,大部分的系统在用户登录时都要求用户输入验证码,验证码的类型的很多,有字母数字的,有汉字的,甚至还要用户输入一条算术题的答案的,对于系统来说使用验证码可以有效果的防止采用机器猜测方法 ...

  5. selenium介绍及环境安装

      selenium简介: seelenium是web应用程序自动化工具,通过自动操作浏览器,进行点击.输入.回车.返回等来模拟用户的真实行为.如何理解和看待selenium项目,selenium官方 ...

  6. 检查图片是否损坏、图片后缀是否与实际图片类型对应 - Python

    图片工具 检查图片是否损坏 日常工作中,时常会需要用到图片,有时候图片在下载.解压过程中会损坏,而如果一张一张点击来检查就太不Cool了,因此我想大家都需要一个检查脚本: 测试图片,0.jpg是正常的 ...

  7. 完美激活Pycharm2019.2.3专业版

    完美激活Pycharm2019.2.3专业版 Pycharm官网自9月11更新到pycharm2019.2.2版本后,在短短的2周时间与9月25又带来新版本2019.2.3,不可说更新不快,侧面可以看 ...

  8. Spring MVC-从零开始-@RequestMapping 注解value属性

    1.@RequestMapping 注解可以在控制器类的级别和/或其中的方法的级别上使用. 2.直接在方法上使用@RequestMapping package com.jt; import org.s ...

  9. Unity - 存读档机制简析

    本文旨在于简要分析Unity中的两种存档机制,即:PlayerPrefs数据持久化方法及Serialization数据序列化方法 较比与源项目,我另加了JSON方法.XML方法等及一些Unity设置, ...

  10. Eureka参数配置->Server端参数

    1.基本参数 参数 默认值 说明 eureka.server.enable-self-preservation true 是否开启自我保护模式 eureka.server.renewal-percen ...