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

多态

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

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

表现形式:有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. Nginx 环境搭建 (windows)

      Nginx 环境搭建 (windows) 资源 # nginx在线文档和支持 For online documentation and support please refer to nginx.or ...

    2. c语言命名规范图

      来自armbbs

    3. es6模块化规范

      在 es6 之前是没有块这个概念的,es6zhong 引入:实际如下: 若 xx1 和 xx2 中有变量名相同,且引入在同一 html 下,需要为引入的 script 标签加上 type=“modul ...

    4. 2019SDN上机第2次作业

      1. 利用mininet创建如下拓扑,要求拓扑支持OpenFlow 1.3协议,主机名.交换机名以及端口对应正确,请给出拓扑Mininet执行结果,展示端口连接情况 创建拓扑: 拓扑支持OpenFlo ...

    5. 7.Vue的计算属性

      1.什么是计算属性 computed:计算属性的重点突出在 属性 两个字上(属性是名词),首先它是个 属性 其次这个属性有 计算的能力(计算是动词),这里的 计算 就是个函数:简单点说,它就是一个能够 ...

    6. ESP8266 SDK开发: 外设篇-GPIO输出高低电平

      前言 官方提供了两个函数 GPIO_OUTPUT_SET(gpio_no, bit_value) 设置GPIO2输出高电平 GPIO_OUTPUT_SET(2, 1); 设置GPIO2输出低电平 GP ...

    7. vue-loader和单页组件介绍

      一.Vue Loader介绍 Vue Loader 是一个 webpack 的loader,它允许你以一种名为 单文件组件(SFCs)的格式撰写 Vue 组件.官方文档地址如下所示: Vue Load ...

    8. [LeetCode] 301. Remove Invalid Parentheses 移除非法括号

      Remove the minimum number of invalid parentheses in order to make the input string valid. Return all ...

    9. 屏蔽flash地区识别

      host文件添加以下0.0.0.0 geo2.adobe.com

    10. ffmpeg Operation not permitted 报错的解决过程记录

      问题重现 由于视频的录制过程出现了一些小问题,需要重新将视频文件切割和合并,找了几个视频编辑软件来做这个事情,最终的结果都不是特别满意,当时已经挺晚的了,本来打算上床睡觉第二天再去想辙,从椅子上起身的 ...