Python 面向对象介绍

断了今生、忘了曾经 提交于 2019-12-29 03:48:38

Python 面向对象介绍

一、面向对象编程解释

  • 编程范式 

  编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程。 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很多种不同的方式。对这些不同的编程方式的特点进行归纳总结得出来的编程方式类别,即为编程范式。 

  不同的编程范式本质上代表对各种类型的任务采取的不同的解决问题的思路,大多数语言只支持一种编程范式。当然也有些语言可以同时支持多种编程范式,

  两种最重要的编程范式分别:面向过程编程和面向对象编程

  • 面向过程

  就是程序从上到下一步步执行,一步步从上到下。从头到尾的解决问题,基本设计思路就是程序一开始是要着手解决一个大的问题,然后把一个大问题分解成很多个小问题或子过程,这些子过程再执行的过程再继续分解直到小问题足够简单到可以在一个小步骤范围内解决。(如: 数据库备份.分三步. 连接数据库、备份数据库、测试备份文件可用性。)

  • 函数式编程

  将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可

  • 面向对象编程

  OOP编程是利用"类"【相当于面向对象中的模版】和"对象"【实际中的角色】来各种模型中创建实现对真实世界的描述。使用面向对象编程的原因一方面是因为它可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效率。另外,基于面向对象的程序可以使它人更加容易理解你的代码逻辑。从而使团队开发变得更从容。 

  对于编程语言的初学者来讲,OOP不是一个很容易理解的编程方式。大家虽然都按老师讲的都知道OOP的三大特性是继承、封装、多态,并且大家也都知道了如何定义类、方法等面向对象的常用语法,但是一到真正写程序的时候,还是很多人喜欢用函数式编程来写代码。特别是初学者,很容易陷入一个窘境就是“我知道面向对象,我也会写类。但我依然没发现在使用了面向对象后,对我们的程序开发效率或其它方面带来什么好处。因为我使用函数编程就可以减少重复代码并做到程序可扩展了,为啥子还用面向对象?" 

  • 无论用什么形式来编程,我们都要明确记住以下原则:
    • 写重复代码是非常不好的低级行为
    • 你写的代码需要经常变更

  开发正规的程序跟那种写个运行一次就扔了的小脚本一个很大不同就是,你的代码总是需要不断的更改。不是修改bug就是添加新功能等,所以为了日后方便程序的修改及扩展。你写的代码一定要遵循易读、易改的原则(专业数据叫可读性好、易扩展) 

  如果你把一段同样的代码复制、粘贴到了程序的多个地方以实现在程序的各个地方调用这个功能,那日后你再对这个功能进行修改时,就需要把程序里多个地方都改一遍,这种写程序的方式是有问题的。因为如果你不小心漏掉了一个地方没改,那可能会导致整个程序的运行都出问题,因此我们知道在开发中一定要努力避免写重复的代码,否则就相当于给自己再挖坑 

while True:
    if cpu利用率 > 90%:
        #发送邮件提醒
        连接邮箱服务器
        发送邮件
        关闭连接
   
    if 硬盘使用空间 > 90%:
        #发送邮件提醒
        连接邮箱服务器
        发送邮件
        关闭连接

  还好,函数的出现就能帮我们轻松的解决重复代码的问题,对于需要重复调用的功能。只需要把它写成一个函数,然后在程序的各个地方直接调用这个函数名就好了,并且当需要修改这个功能时,只需改函数代码。然后整个程序就都更新了 

def 发送邮件(内容)
    #发送邮件提醒
    连接邮箱服务器
    发送邮件
    关闭连接
   
while True:
    if cpu利用率 > 90%:
        发送邮件('CPU报警')
   
    if 硬盘使用空间 > 90%:
        发送邮件('硬盘报警')

  其实OOP编程的主要作用也是使你的代码修改和扩展变的更容易.函数编程与OOP的主要区别就是OOP可以使程序更加容易扩展和易更改

二、面向对象的概念

  • 面向对象编程组成
    • Class 类(相当于面向对象中的类)

A.一个类即是对一类拥有相同属性的对象的抽象、蓝图、原型.在类中定义了这些对象的都具备的属性(variables(data))、共同的方法 

    • Object 对象(实际中的角色) 

A.一个对象即是一个类的实例化后实例【什么是实例化:造僵尸的过程就叫实例化】.一个类必须经过实例化后方可在程序中调用.一个类可以实例化多个对象.每个对象亦可以有不同的属性.就像人类是指所有人.每个人是指具体的对象.人与人之前有共性.亦有不同.

  • 面向对象编程特性
    • Encapsulation 封装:(相当的属性封装在一起.)

A.概念

  将内容封装到某个地方, 以后再去调用被封装在某处的内容。

      B.作用

        1.防止数据被任意修改

        2.使外部程序不需要关注对象内部的构造. 只需要通过此对象对外提供的接口进行直接访问即可

    • Inheritance 继承:(通过父类-子类的方式以最小代码量的方式实现 不同角色的共同点和不同点的同时存在)想想财产继承

      A.概念

        一个类可以派生出子类.在这个父类里定义的属性、方法自动被子类继承

    • Polymorphism 多态:(简单讲:多种状态(一个人能说多种语言.中文\英文\日语))

      A.多态是面向对象的重要特性,简单点说:“一个接口.多种实现(一个人能说多种语言.中文\英文\日语)”.

        • 指一个基类【基类=父类】中派生出了不同的子类.且每个子类在继承了同样的方法名的同时又对父类的方法做了不同的实现(父类中有多种方法.但是调用时只调用自己的).这就是同一种事物表现出的多种形态.

      B.编程其实就是一个将具体世界进行抽象化的过程.

        • 多态就是抽象化的一种体现.把一系列具体事物的共同点抽象出来.再通过这个抽象的事物.与不同的具体事物进行对话

      C.对不同类的对象发出相同的消息将会有不同的行为.如:

        • 你的老板让所有员工在九点钟开始工作.他只要在九点钟的时候说:“开始工作”即可.而不需要对销售人员说:“开始销售工作”.对技术人员说:“开始技术工作”. 因为“员工”是一个抽象的事物.只要是员工就可以开始工作.他知道这一点就行了.至于每个员工.当然会各司其职.做各自的工作.

      D.多态允许将子类的对象当作父类的对象使用

        • 某父类型的引用指向其子类型的对象.调用的方法是该子类型的方法.这里引用和调用方法的代码编译前就已经决 定了.而引用所指向的对象可以在运行期间动态绑定
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!