博客
关于我
Python学习--继承
阅读量:445 次
发布时间:2019-03-06

本文共 1771 字,大约阅读时间需要 5 分钟。

面向对象编程的三大核心特性:封装、继承、多态

作为一名开发人员,我们在编写代码时,常常会遇到如何更好地组织代码结构的问题。面向对象编程中,通过封装、继承和多态三大特性,可以有效地解决这一难题。下面我们将从这三个特性入手,深入探讨它们的意义和应用场景。

一、面向对象三大特性

  • 封装

    根据对象的职责,将其属性和方法封装到一个抽象的类中。通过将有关联的属性和方法集中到一个类中,可以提高代码的可维护性和可扩展性。比如,一个Dog类可以将与狗相关的所有属性和方法(如bark、run等)封装在一起。

  • 继承

    通过继承,子类可以复用父类已经实现的代码,从而避免重复编写。比如,Dog类可以继承自Animal类,直接使用Animal类中已经封装的eat、drink等方法,而不需要再次实现。

  • 多态

    多态的核心思想是:同一个方法可以在不同的对象中产生不同的执行结果。通过动态绑定,允许不同的子类在调用同一个方法时,根据自身的特性产生不同的行为。比如,一个Shape类可以有多个子类(如Circle、Rectangle),每个子类可以重写同一个draw方法,产生不同的绘图结果。

  • 二、单继承详解

  • 继承的概念、语法与特点

    • 继承的概念:子类可以从父类中继承父类的所有属性和方法。通过这种方式,子类可以在自己的基础上,扩展功能或修改现有的功能。

    • 继承的语法:在Python中,类继承的语法非常简单。子类继承自父类,只需要在类定义时将父类名放在括号中即可。

      class Dog(Animal):
      def bark(self):
      print("汪汪叫")
    • 继承的特点

    • 子类可以直接使用父类的属性和方法。
    • 子类应根据自身的职责,封装子类特有的属性和方法。
    • 子类可以重写父类的方法,以满足自身需求。
  • 方法的重写

    在实际开发中,父类的方法可能已经满足了基本需求,但在子类中可能需要对其进行修改或扩展。Python中支持方法的重写,具体有两种情况:

    • 覆盖(Override):完全替代父类的方法实现。

      class Dog(Animal):
      def eat(self):
      print("我吃的一般")
    • 扩展(Extend):在父类方法的基础上,增加额外的功能。可以通过调用父类的方法来实现。

      class XiaoTianQuan(Dog):
      def eat(self):
      super().eat()
      print("我吃的金贵")
    • super()的使用:在重写父类方法时,super()用于调用父类的方法。它是Python中实现方法重写的核心工具。

  • 父类的私有属性和方法

    • 子类无法直接访问父类的私有属性或方法。
    • 子类可以通过父类的公有方法间接访问父类的私有属性或方法。

    例如,父类A中的__num2属于私有属性,子类B无法直接访问,但可以通过B的demo方法间接访问。

  • 三、多继承深入探讨

  • 多继承的概念

    多继承允许一个类继承多个父类,子类可以同时继承多个父类的属性和方法。这种方式在处理具有多个父类关系的对象时非常有用,比如在现实生活中,一个孩子可以同时继承父亲和母亲的特性。

  • 多继承的语法

    在Python中,类继承多个父类的语法非常简单,直接在类定义时将多个父类名放在括号中即可。

    class C(A, B):
    pass
  • 多继承的注意事项

    • 如果不同的父类中存在同名的方法,子类在调用时将按照MRO(方法分解顺序)从左到右依次查找,找到第一个匹配的方法。
    • 因此,在多继承时,应尽量避免同名的方法和属性,以防造成混淆。
  • MRO(Method Resolution Order)

    在Python中,MRO决定了在多继承情况下如何搜索方法和属性。MRO的顺序是根据类继承关系决定的,通常是从左到右的顺序进行查找。

  • 新式类与旧式类

    • 新式类:以object为基类的类,推荐使用。
    • 旧式类:不以object为基类的类,不推荐使用。
    • 在Python3.x中,所有类都默认以object为基类(新式类),而在Python2.x中,默认不以object为基类(旧式类)。
  • 多继承虽然提供了灵活的代码结构,但也带来了一些挑战。开发者需要谨慎处理父类之间的方法和属性冲突问题,以确保代码的可维护性和可读性。

    转载地址:http://jaoyz.baihongyu.com/

    你可能感兴趣的文章
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_生成插入Sql语句_实际操作02---大数据之Nifi工作笔记0041
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_不带分页处理_01_QueryDatabaseTable获取数据_原0036---大数据之Nifi工作笔记0064
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
    查看>>
    NIFI从Oracle11G同步数据到Mysql_亲测可用_解决数据重复_数据跟源表不一致的问题---大数据之Nifi工作笔记0065
    查看>>
    NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
    查看>>
    nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
    查看>>
    NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045
    查看>>
    NIFI分页获取Postgresql数据到Hbase中_实际操作---大数据之Nifi工作笔记0049
    查看>>
    NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>
    NIFI同步MySql数据源数据_到原始库hbase_同时对数据进行实时分析处理_同步到清洗库_实际操作06---大数据之Nifi工作笔记0046
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
    查看>>
    NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_处理器介绍_处理过程说明---大数据之Nifi工作笔记0019
    查看>>
    NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_实际操作---大数据之Nifi工作笔记0020
    查看>>
    NIFI大数据进阶_Json内容转换为Hive支持的文本格式_实际操作_02---大数据之Nifi工作笔记0032
    查看>>
    NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031
    查看>>