测开之面向对象进阶篇・《多态》(代码片段)

七月的小尾巴 七月的小尾巴     2023-01-08     714

关键词:

面向对象三大特征

面向对象编辑的三大特征:封装、继承、多态。

  • 封装:客观的失误封装成类(将数据和方法放在一个类中构成了封装)。
  • 继承:python中一个类可以继承于一个类,也可以继承多个类,被继承的类叫做父类,继承的叫做之类。
  • 多态:指的是一类食物有多种形态,一个抽象类有多个子类(因而多态的概念依赖于继承),不同的之类对象调用相同的方法,产生不同的执行过程,多态可以增加代码的灵活度。

多态

  1. 定义一个父类,继承某个方法
  2. 定义多个子类,在子类中重新父类方法,每个之类实现不同的功能
  3. 假设我们定义了一个函数,需要一个父类类型的对象参数,那么调用函数的时候,传入父类不用的之类类型对象,那么这个函数会执行不同的功能,这就是多态的体现。

可能上面的描述会有些抽象,下面我们编写代码,来方便大家更好的理解多态:

class Animal(object):
    """动物类"""

    def func(self):
        print('动物发出了声音')


class Cat(Animal):
    """猫类"""

    def func(self):
        print('喵 喵 喵')


class Dog(Animal):
    """狗类"""

    def func(self):
        print('汪 汪 汪 ')


class Hero:
    def func(self):
        print('这个是英雄类的方法,不是动物类的对象')


def work01(musen: Animal):
    musen.func()

上方代码中,我们定义了一个动物父类,然后通过多个动物子类去继承父类,每个动物的叫声都不一样,这里我们是继承父类,然后实现不同的功能。

假设我们只封装了一个父类,然后将所有的动物叫声都封装到父类里面,那么随着后期代码越来越复杂,会变得不易维护且耦合性强。因此我们可以使用多态的概念,从而增加代码的灵活度。

注意点:python中函数的参数是没有类型限制的,所有多态在python中的体现并不是很严谨。多态的概念是应用与JAVA和C#这一类强语言中,而Python崇尚“鸭子类型”

鸭子类型

  • 鸭子类型的概念:他并不要求严格的继承体系,关注的不是对象的类型,而是它是否具有要调用的方法。
  • 鸭子类型在python中的概念:
    内置函数iter:参数可以是实现迭代协议__iter__方法的任何对象的类型。

测开之面向对象进阶篇・《属性自省》(代码片段)

私有属性类里面定义的变量叫做属性,那么类属性有两种,分为:公有属性和私有属性。私有属性的定义:单下滑线开头:_attr双下划线开头:__attr其中单下划线开头的在外部可以直接访问,双下滑线&#... 查看详情

测开之数据类型进阶篇・第三篇《推导式》(代码片段)

目录列表推导式什么是推导式?推导式代码实现推导式的误区在列表推导式中添加if语句列表推导式中实现多个循环字典推导式字典推导式实现列表推导式什么是推导式?列表推导式可以利用range区间、元组、列表、字典... 查看详情

测开之函数进阶篇・第六篇《闭包》(代码片段)

目录闭包闭包的概念闭包的内存分配机制闭包闭包的概念一个完整的闭包,必须满足以下三个条件:1、函数中嵌套函数2、外层函数返回内存嵌套函数名3、内存嵌套函数有引用外层的一个非全局变量deffunc():num=100defcount... 查看详情

测开之数据类型进阶篇・第四篇《生成器和迭代器》(代码片段)

这里写目录标题生成器表达式生成器的定义为什么要有生成器创建生成器生成器的工作原理迭代器可迭代对象迭代器对象工作原理迭代器的优缺点生成器表达式生成器的定义在Python中,一边循环一边计算的机制,称为生... 查看详情

测开之函数进阶篇・第七篇《装饰器》(代码片段)

目录装饰器开放封闭原则装饰器的作用装饰器的应用场景实现一个装饰器装饰器原理阐述带参数的装饰器装饰器装饰类定义一个时间装饰器装饰器开放封闭原则软件实体应该是可扩展、而不可修改的。也就是说,对扩展是开... 查看详情

测开之数据类型进阶篇・第二篇《字典和集合的原理应用》(代码片段)

目录集合什么是集合?定义空集合集合的特点-自动去重集合常用的方法空集合添加元素add()删除集合元素remove()更新元素update()清空集合元素clear()复制元素copy()字典和集合的存储原理关于集合、字典、元祖、列表性能分析集... 查看详情

测开之函数进阶篇・第五篇《递归函数纯函数匿名函数偏函数》(代码片段)

目录递归函数递归函数的定义定义递归函数纯函数纯函数的概念纯函数的3个原则函数的副作用python常用的内置函数匿名函数三步运算符偏函数偏函数的定义偏函数的案例递归函数递归函数的定义在函数中调用函数自身,我们... 查看详情

测开之并发编程篇・《并发并行线程队列进程和协程》(代码片段)

并发编程并发和并行多任务概念并发和并行同步和异步多线程threading模块介绍自定义线程类线程任务函数的传递多线程资源共享和资源竞争问题GIL全局解释锁互斥锁通过锁解决资源竞争问题死锁队列队列的方法FIFO先入先出队列LI... 查看详情

python面向对象编程进阶(代码片段)

前言上上篇我们讲解了Python面向对象编程的基础知识,《Python基础篇:面向对象怎样炼成的》这篇我们继续来讨论面向对象编程相关的内容。目录前言可见性和属性装饰器动态属性静态方法和类方法继承和多态总结可见... 查看详情

测开之javascript・《javascript基础》(代码片段)

Javascript介绍和基本使用Javascript概述嵌入页面的方式基本用法注释变量数据类型运算符条件语句函数对象循环扩展介绍和基本使用Javascript概述要了解JavaScript,我们首先要回顾一下JavaScript的诞生。在上个世纪的1995年,当... 查看详情

测开之内存管理篇・《内存管理机制》(代码片段)

内存管理机制内存管理机制引用计数机制数据池和缓存小整数池Intern机制缓存机制垃圾回收机制引用计数标记清除分代回收机制内存管理机制在python中创建对象的时候,首先会去申请内存地址,然后对这个对象进行初始... 查看详情

面向对象进阶1(代码片段)

目录类的继承什么是继承为什么要继承对象的继承类的查找顺序类的派生派生方法一派生方法二类的组合菱形继承问题类的分类新式类经典类菱形继承问题类的多态与多态性多态多态性多态性的好处类的继承什么是继承继承就是... 查看详情

测开之・《路由vue-route》(代码片段)

路由vue-route安装vue-routevue-router的基本使用编程式和声明式导航路由重定向命名路由安装vue-route使用安装命令安装npminstallvue-router在main.js中进行注册importVuefrom'vue'importVueRouterfrom'vue-router'Vue.use(VueRouter)直接全局的scrip 查看详情

测开之・《前后端交互axios》(代码片段)

前端后端交互axios前言axios的使用安装axiosaxios发送get请求get请求带参数发送post请求全局axios配置多服务场景调用后端鉴权的接口处理axios请求拦截器响应拦截器asyncawait的使用前言Axios是一个基于promise(异步实现)的HTTP库,可以... 查看详情

测开之html・第一篇《html语法基础》(代码片段)

目录HTML页面结构文档声明页面头部页面内容常见的HTML标签注释标题标签段落和换行标签块标签含样式和语义的行内标签图像标签和链接标签列表有序列表无序列表表格表单form标签from表单中包含的元素input标签label标签textarea标... 查看详情

测开之css・第一篇《css语法基础》(代码片段)

目录css介绍和引用css概述css的基础语法css引入方法css背景设置背景色设置背景图像背景定位css文本样式css选择器标签选择器id选择器类选择器属性选择器包含选择器(层级选择器)组选择器css介绍和引用css概述CSS指的是层... 查看详情

测开之vue・《vue高级特性》(代码片段)

Vue基础语法及高级特性Vue基本语法初始Vue安装vueVue的指令和插值属性绑定事件绑定vue的双向数据绑定分支语句遍历语句Vue基本语法初始VueVue是一套用于构建用户界面的渐进式框架。与其他大型框架不同的是,Vue被设计为可以... 查看详情

面向对象(进阶)(代码片段)

一.关于上篇面向对象(初识)总结:1.面向对象是一种编程方式,此编程方式的实现是基于对类和对象的使用2.类:是一个模板,模板中包装了多个"函数"供使用(可以讲多个函数中公用的变量封装到对象中)3.对象,根据模板创建的实例(即:... 查看详情