面向对象编程之多态以及继承、抽象类和鸭子类型三种表现形式

多态

定义:同一种类型的事物,不同的形态

作用: 多态也称之为“多态性”。用于在不知道对象具体类型的情况下,统一对象调用方法的规范(比如说名字)

表现形式:有3种,分别是继承、抽象类和鸭子类型

  • 继承:耦合度高,程序的可扩展性低

    实现

    • 父类:定义一套统一的规范(比如:方法名统一)
    • 子类:遵循父类的统一规范(比如:子类遵循父类方法名称的统一)
  • 抽象类:耦合度极高,程序的可扩展性极低

    由于在python中,继承并不会强制子类必须要遵循父类的规范,因此出现了抽象类

    定义:在python内置的abc模块中,有一个抽象类ABCMeta

    作用:限制子类必须遵循父类的编写模块

    实现

    • 父类需要继承ABC模块中的ABCMeta,语法是 metaclass = ABCMeta
    • 在父类的方法中,需要使用装饰器 abc.abstractmethod

    注意:

    1.abc.abstractclassmethod已经被停用了,在后期代码编写时,不要使用。abc.abstractmethod是目前在用的装饰器

    2.在抽象类的表现形式下,父类中被abc.abstractmethod装饰的方法,子类必须按照父类的方法编写规范,缺一不可

    3.在python中不推荐使用抽象类

    """
    抽象类的实现
    1. 导入模块 abc
    2. 父类继承abc.ABCMeta类,语法:metaclass = abc.ABCMeta
    3. 给父类的方法,装饰上 abc.abstractmethod
    注意:abc.abstractclassmethod 已被停用,带删除线;
    现使用abc.abstractmethod
    """
    import abc # 父类Animal 继承abc.ABCMeta 类
    class Animal(metaclass=abc.ABCMeta):
    # @abc.abstractclassmethod 已停用
    # 装饰上abc.abstractmethod
    @abc.abstractmethod
    def speak(self): # 该方法被abstractmethod装饰,子类必须一致
    print("from Animal")
    pass def run(self): # 该方法没有被装饰,子类可不保持一致
    pass class Dog(Animal):
    def speak(self):
    print("汪汪汪……")
    def pao(self):
    print("旺财狂奔起来!!!!") dog = Dog()
    dog.speak() # 输出结果:汪汪汪……
    dog.pao() # 输出结果:旺财狂奔起来!!!!

    如果不按照父类的方法命名规范,则会报错

    # 父类Animal参照												

    python基础-面向对象编程之多态的更多相关文章

    1. python基础-面向对象编程之继承

      面向对象编程之继承 继承的定义:是一种新建类的方式,新建的类称之为子类或派生类,被继承的父类称之为基类或超类 继承的作用:子类会""遗传"父类的属性,从而解决代码重用问题 ...

    2. python基础-面向对象编程之封装、访问限制机制和property

      面向对象编程之封装 封装 定义:将属性和方法一股脑的封装到对象中,使对象可通过"对象."的方式获取或存储数据. 作用:让对象有了"."的机制,存取数据更加方便 ...

    3. python基础-面向对象编程之反射

      面向对象编程之反射 反射 定义:通过字符串对对象的属性和方法进行操作. 反射有4个方法,都是python内置的,分别是: hasattr(obj,name:str) 通过"字符串" ...

    4. python基础-面向对象编程之组合

      面向对象编程之组合 定义:一个对象中拥有另一个或其他多个对象的属性和方法. 作用:减少代码的冗余,降低耦合度 关于耦合度的说明 耦合:通俗地讲,就是相互作用,相互影响的意思 耦合度越高,程序的可扩展性 ...

    5. python基础——继承和多态

      python基础——继承和多态 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类 ...

    6. Python基础教程之List对象 转

      Python基础教程之List对象 时间:2014-01-19    来源:服务器之家    投稿:root   1.PyListObject对象typedef struct {    PyObjec ...

    7. Python基础教程之udp和tcp协议介绍

      Python基础教程之udp和tcp协议介绍 UDP介绍 UDP --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议.UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但 ...

    8. python基础之类的多态与多态性

      原文链接:https://www.cnblogs.com/luchuangao/p/6739557.html 很多人喜欢将多态与多态性二者混为一谈,然后百思不得其解,其实只要分开看,就会很明朗. 一 ...

    9. python基础--面向对象之多态

      # 多态是指一类事物有多种行态, # 例如:动物有多种形态:人,狗,猫 # 他们有一些共同的特征:吃,喝,拉,撒 # 多态性是指在不考虑实例类型的情况下使用实例 # 对同一事物不同的类,对象有不同的响 ...

    随机推荐

    1. JAVA并发-Condition

      简介 在没有Lock之前,我们使用synchronized来控制同步,配合Object的wait().notify()系列方法可以实现等待/通知模式.在Java SE5后,Java提供了Lock接口, ...

    2. 【使用篇二】SpringBoot整合Servlet(1)

      两种方式: 通过注解扫描完成 Servlet组件的注册 通过方法完成 Servlet组件的注册 一.通过注解扫描完成 Servlet 组件的注册 1. 编写Servlet类 /** * SpringB ...

    3. 循环控制语句if 、for、case、while

      if 循环控制(单分支与多分支) (1)单个判断(单分支循环): if [ 条件判断 ]; then 执行动作 fi if [ 条件判断 ]; then 执行动作 else 执行动作 fi 写入tes ...

    4. Python进阶-VI 生成器函数进阶、生成器表达式、推导式

      一.生成器函数进阶 需求:求取移动平均数 1.应用场景之一,在奥运会气枪射击比赛中,每打完一发都会显示平均环数! def show_avg(): print('你已进入显示移动平均环数系统!') a ...

    5. Ubuntu放弃战斗, Linux桌面的悲哀 - 简书

      Ubuntu放弃战斗, Linux桌面的悲哀 - 简书 https://www.jianshu.com/p/86dd6e34ce91

    6. MySQL实战45讲学习笔记:第十四讲

      一.引子 在开发系统的时候,你可能经常需要计算一个表的行数,比如一个交易系统的所有变更记录总数.这时候你可能会想,一条 select count(*) from t 语句不就解决了吗? 但是,你会发现 ...

    7. Webpack 一些核心概念了解

      Webpack的几个核心概念 Entry:入口,Webpack执行构建的第一步将从Entry开始,可抽象成输入. Module:模块,在Webpack里一切皆模块,一个模块对应一个文件.Webpack ...

    8. Elasticsearch由浅入深(七)搜索引擎:_search含义、_multi-index搜索模式、分页搜索以及深分页性能问题、query string search语法以及_all metadata原理

      _search含义 _search查询返回结果数据含义分析 GET _search { , "timed_out": false, "_shards": { , ...

    9. 联合CRF和字典学习的自顶向下的视觉显著性-全文解读

      top-down visual saliency via joint CRF anddictionary learning 自顶向下的视觉显著性是使用目标对象的可判别表示和一个降低搜索空间的概率图来进 ...

    10. 2.1:CGPROGRAM

      文章著作权归作者所有.转载请联系作者,并在文中注明出处,给出原文链接. 本系列原更新于作者的github博客,这里给出链接. 前言 经过前面两个章节的铺垫,我们对渲染以及Unity Shaderlab ...