1、面向对象编程的概念

  • Python从设计之初就已经是一门面向对象的语言,正因为如此,我们肯定听过Python中一切皆对象的说法。
  • 面向对象编程(Object-oriented Programming,简称 OOP),是一种程序设计思想。
  • 面向对象编程把对象作为程序的基本单元,一个对象包含了数据(属性)和操作数据的函数。
  • 在面向对象的设计思想中,将程序视为多个对象共同协作的结果。程序被划分为多个子模块,再由多个对象完成各自模块最终实现程序的功能。
  • 面向对象编程,是一种封装代码的思想。
  • 面向对象编程是在面向过程编程的基础上发展来的,它比面向过程编程具有更强的灵活性和扩展性。

2、面向对象编程和面向过程编程的区别

(1)面向过程编程

面向过程的程序设计把函数作为程序的基本单元。程序设计时,编写一组一组的函数,然后一步一步按照顺序的执行各个函数,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。

面向过程编程,核心是"过程",关注的是解决问题的步骤,即先做什么再做什么。面向过程的编程就像一个流水线,是一种机械式的思维。若程序一开始是要着手解决一个大问题,面向过程的编程思维会把一个大问题分解为很多个小问题,这些小问题还可以继续分解,直到小问题足够简单可以在一个小步骤中解决。

  1. 优点:

    • 极大的降低了写程序的复杂度,只需要顺着执行的步骤,堆叠代码即可。
    • 复杂问题流程化,进而简单化。
  2. 缺点:
    • 一套流水线或者流程就是来解决一个问题,如果其中一个方法修改了,那其他组件也要跟着作相应的修改。
    • 也就是出现问题,牵一发而动全身。

(2)面向对象编程

而面向对象的程序设计把对象作为程序的基本单元,程序设计时,设计许多的对象(类创建而成),每个对象都有能力解决一些相应的问题。而我们面向对象编程是基于面向过程编程的,类是将功能(小步骤)进行了封装,只要找到了具体的类,创建出对象,就可以调用其中的具体功能。

面向对象是用来解决问题的一种思维模式,在以后开发中,先找对象,调用对象中的具体功能。如果真的没有能够完成需求的对象,这时就自己定义类,并将所需的功能定义到对象中,方便以后使用。

  1. 优点:

    • 面向对象是一种更符合人们思考习惯的思想。
    • 面向过程中更多的体现的是执行者,面向对象中更多的体现是指挥者,指挥对象做事情。
    • 面向对象将复杂的问题简单化。
    • 由于面向对象有封装、继承、多态性的特性,使系统更加灵活、易维护、易复用、易扩展,可以设计出低耦合的系统。
  2. 缺点:
    • 性能比面向过程低。
    • 所谓有得必有失,但在如今硬件疯狂发展,系统又越来越复杂的情况下,权衡利弊,我们选择面向对象编程。

3、举例理解面向对象

面向对象是一种抽象化的编程思想,很多编程语言中都有的一种思想。

1)需求

例如:洗衣服

思考:几种途径可以完成洗衣服?

答: 手洗 和 机洗。

2)面向过程洗衣服

手洗就相当于面向过程洗衣服:

  • 找盆
  • 放水
  • 加洗衣粉
  • 浸泡
  • 搓洗
  • 拧干水
  • 倒水
  • 晾晒
  • 收起叠好

在经历这么多步骤后,你终于把衣服完了,但是自己已经精疲力尽。

3)面向对象洗衣服

机洗就相当于面向对象洗衣服。

这个洗衣机就是对象,衣服放进洗衣机中:

  • 开启洗衣机(类创建创建对象)
  • 洗衣服(调用对象中的方法)
    • 洗衣机--加水
    • 洗衣机--加洗衣粉
    • 洗衣机--浸泡
    • 洗衣机--搓洗
    • 洗衣机--脱水
    • 洗衣机--排水
    • 洗衣机--烘干
  • 关闭洗衣机(程序执行结束收起衣服)

你坐在窗边看着夕阳,感叹生活真是太美好了!

4)总结:

思考:对比两种洗衣服途径,哪种方式更简单?

答:机洗更简单。

机洗只需要找到一台洗衣机,加入简单操作就可以完成洗衣服的工作,而不需要关心洗衣机内部发生了什么事情。

面向对象就是将编程当成是一个事物,对外界来说,事物是直接使用的,不用去管他内部的情况。而编程就是设置事物能够做什么事。

4、Python的面向对象编程

面向对象编程是利用对象来创建各种模型,来实现对真实世界的描述。

使用面向对象编程的原因:

  • 一方面是因为它可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效率 。
  • 另外,基于面向对象的程序可以使它人更加容易理解你的代码逻辑,从而使团队开发变得更从容。

5、面向对象的几大核心特性

  1. Class类:一个类指相同事物相同特征提取,把相同的属性方法提炼出来定义在类中。
  2. Object对象:一个对象是类的实例,对象是具体的,类是抽象。
  3. 封装:对外部世界隐藏对象的工作细节。
  4. 继承:一个子类继承基类的字段和方法。
  5. 多态:对不同类的对象使用同样的操作。

『无为则无心』Python面向对象 — 45、面向对象编程的更多相关文章

  1. 『无为则无心』Python面向对象 — 46、类和对象

    目录 1.理解类和对象 2.类 3.对象 4.Python中的对象 5.类和对象的定义 (1)定义类 (2)创建对象 (3)练习 6.拓展:isinstance() 函数 1.理解类和对象 (1)类和 ...

  2. 『无为则无心』Python面向对象 — 51、私有成员变量(类中数据的封装)

    目录 1.私有成员变量介绍 (1)私有成员变量概念 (2)私有成员变量特点 (3)私有成员变量体验 2.属性私有化工作原理 3.定义成员变量的标识符规范 4.私有成员变量的获取和设置方式 1.私有成员 ...

  3. 『无为则无心』Python面向对象 — 52、私有成员方法(类中行为的封装)

    Python对于类的成员没有严格的访问控制限制,这与其他面向对象的编程语言是有所区别的. 关于私有方法其实和私有属性差不多,有如下要点: 1.通常我们约定,两个下划线开头的方法是私有方法. 2.类内部 ...

  4. 『无为则无心』Python面向对象 — 53、对Python中封装的介绍

    目录 1.继承的概念 2.继承的好处 3.继承体验 4.单继承 5.多继承 1.继承的概念 在Python中,如果两个类存在父子级别的继承关系,子类中即便没有任何属性和方法,此时创建一个子类对象,那么 ...

  5. 『无为则无心』Python面向对象 — 56、Python多态

    目录 1.Python中的多态 (1)多态的定义 (2)多态的好处 (3)多态实现步骤 2.体验多态 1.Python中的多态 (1)多态的定义 多态是一种使用对象的方式,子类重写父类方法,不同的子类 ...

  6. 『无为则无心』Python面向对象 — 47、Python中的self详解

    目录 1.self的作用 2.self的使用注意事项 (1)self代表类的实例,而非类 (2)self不必非写成self,只是一种规范. (3)类中方法的形参中一定要写self,包括内置函数 (4) ...

  7. 『无为则无心』Python面向对象 — 54、重写和super()函数

    目录 1.重写 2.super()函数 方式一 方式二 __mro__内置类属性说明 1.重写 在子类中如果有和父类同名的方法,则通过子类实例去调用该方法时,会调用子类中的该方法而不是父类的方法,这个 ...

  8. 『无为则无心』Python面向对象 — 55、多层继承和继承中的私有成员

    目录 1.Python支持多层继承 (1)多层继承实现 (2)多层继承和多重继承区别 2.继承中的私有成员 (1)继承中父类私有属性和私有方法 (2)获取和修改私有属性值 1.Python支持多层继承 ...

  9. 『无为则无心』Python面向对象 — 58、类方法和静态方法

    目录 1.实例方法 2.类方法 (1)类方法特点 (2)类方法使用场景 3.静态方法 (1)静态方法特点 (2)静态方法使用场景 1.实例方法 实例方法既可以调用静态方法也可以调用类方法. # 定义一 ...

随机推荐

  1. kafka学习笔记(三)kafka的使用技巧

    概述 上一篇随笔主要介绍了kafka的基本使用包括集群参数,生产者基本使用,consumer基本使用,现在来介绍一下kafka的使用技巧. 分区机制 我们在使用 Apache Kafka 生产和消费消 ...

  2. 《剑指offer》面试题61. 扑克牌中的顺子

    问题描述 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,A为1,J为11,Q为12,K为13,而大.小王为 0 ,可以看成任意数字.A 不能视为 14. 示例 ...

  3. nRF24L01基于FIFO TX队列的发送性能优化

    RF24项目代码分析 头文件 https://github.com/nRF24/RF24/blob/master/RF24.h 源文件 https://github.com/nRF24/RF24/bl ...

  4. MySql服务器逻辑架构

    一.MySql服务器逻辑架构图         每个虚线框都是一层: 第一层:最上层的服务器不是MySql所独有的,大多数基于网络的客户端/服务器工具或者服务都有类似的系统.比如链接处理,授权认证,安 ...

  5. golang中的标准库strconv

    strconv 包 strconv包实现了基本数据类型与其字符串表示的转换,主要有以下常用函数: Atoi().Itia().parse系列.format系列.append系列. string与int ...

  6. Android 12(S) 图形显示系统 - SurfaceFlinger的启动和消息队列处理机制(四)

    1 前言 SurfaceFlinger作为Android图形显示系统处理逻辑的核心单元,我们有必要去了解其是如何启动,初始化及进行消息处理的.这篇文章我们就来简单分析SurfaceFlinger这个B ...

  7. 使用Termux并与ubuntu建立ssh连接

    什么是Termux? Termux是一个Android终端仿真器和Linux环境应用程序,直接工作,无需根目录或设置.一个最小的基本系统被自动安装-额外的软件包可以使用APT软件包管理器来使用.不需要 ...

  8. 裸k8s搭建中遇到的两个坑

    在装docker的时候报错了,需要先安装selinux版本.才能安装容器. 需要按照提示安装这个包. 采用强制安装.rpm -ivh 包名字 --force --nodeps 在k8s的master上 ...

  9. JavaScript数据结构之链表

    链表相较于数组的优缺点 1. 链表在 插入.删除.移动数据效率比数组要高,数组插入.移动.删除数据需要改变没有数据的索引,而链表则只需要更改指针即可 2. 在查询方面,数组要优于链表,数组存储的数据是 ...

  10. Vue之性能调优

    打包优化 1. 屏蔽 sourceMap sourceMap作用:项目打包后,代码都是经过压缩加密的,如果运行时报错,输出的错误信息无法准确得知是哪里的代码报错. 在config目录的index.js ...