面向对象编程

面向对象--Object Oriented Programming,简称oop,是一种程序设计思想。在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一个功能。举个例子,你要做饭,可以用电磁炉,也可以用煤气灶。不同的编程范式本质上代表对各种类型的任务采取的不同的解决问题的思路,两种最重要的编程范式分别是面向过程编程和面向对象编程。

提到面向对象,就不得不提到另一种编程思想,面向过程;什么是面向过程呢,面向过程的思想是把一个项目、一件事情按照一定的顺序,从头到尾一步一步地做下去,先做什么,后做什么,一直到结束。这种思想比较好理解,其实这也是一个人做事的方法,我们之前编程的思想也都是使用这种思想。这种编程思想,只要前面有一个步骤变了,那么后面的就也要变,后面维护起来比较麻烦,这样的编程思想,我们在写一些简单的小程序、只执行一次的脚本时可以使用。而面向对象呢,面向对象的思想是把一个项目、一件事情分成更小的项目,或者说分成一个个更小的部分,每一部分负责什么方面的功能,最后再由这些部分组合而成为一个整体。这种思想比较适合多人的分工合作,就像一个大的机关,分各个部门,每个部门分别负责某样职能,各个部门可以充分发挥自己的特色,只要符合一定前提就行了。

举个例子:比如刚才说的一个大的机关,要做某一个项目,从面向过程的思想来说,应该是这样分析的,先怎么样,再怎么样,最后怎么样。第一样应该如何完成,第二样应该如何完成等等。等到每一步骤都完成,项目也就完成了。而面向对象的思想则应该是这样想的,这个项目是由几个部分组成的,我们就做好分工,成立一个部门来做一个部分的功能,另一个部门来做另一个部分。各个部门可以不用理解其他部门的事,只要完成自己那一部分的事情就OK了。

面向对象的特性

类:class

类就是一个种类、一个模型

定义类首字母大写

在类中定义了这些对象的都具备的属性(variables(data))、共同的方法

实例/对象:object

实例或者对象就是根据模型制作出来的东西

一个对象即是一个类的实例化后实例,一个类必须经过实例化后方可在程序中调用,一个类可以实例化多个对象,每个对象亦可以有不同的属性,就像人类是指所有人,每个人是指具体的对象,人与人之前有共性,亦有不同。

实例化

就是做东西的这个过程

属性

类里面的变量

类变量

就在直接在类下面定义的变量,没有加self的,每个实例都可以用。

修改类变量:通过类名来修改类变量。或者通过实例来修改类变量

实例变量

self.xxx = xxx 加了self的变量才是实例变量,必须得实例化之后才可以使用

构造函数 /构造方法

类在实例化的时候会自动执行的一个函数

析构函数

实例在销毁的时候自动执行的函数,什么时候销毁?实例化之后,代码运行,直到没有代码可以执行了,变量都是存在内存里的,内存中没有这个变量了,就是销毁了

self的作用

代表的是本类对象,即代表实例。

id(self)=id(实例):即self与实例化出来的实例的内存地址相同,即他俩是一个东西。

一个变量前面加了self之后,那么在这个类里面的其他的函数都可以用了。

也可以在类函数里面调用另一个函数,也得用self.函数()

方法:类里面的函数

类方法

1、不需要实例化就可以调用

2、它可以使用类变量

3、调用其他的类方法。

4、它不可以使用实例方法、实例变量

如果类里面的这个方法,它并没有使用到其他的实例变量、或者其他实例方法,那么就给他定义成类方法

5、实例方法可以调用类方法,类方法不可以调用实例方法。

不可以调用实例方法,会报错

实例方法里面可以通过self.来调用类方法

也可以通过实例来直接调用类方法

实例方法

需要传self的方法,都是实例方法,必须得实例化之后才可以使用

实例方法里面可以随便通过self来调用实例方法,类方法,静态方法,类变量。

静态方法

1、不需要实例化就可以调用的

2、它就是一个定义在类里面的普通函数,不能使用实例变量、实例方法、不能使用类变量、类方法。

3、它就是定义在类里面的公共方法,谁都可以调用,可以直接用累调用,可以用实例来调用,可以在类方法里面用cls.来调用

4、打印一些帮助文档之类的可以用静态方法

属性方法

看起来像变量的一个方法。调用属性方法时函数名后面不需要加()

私有

变量、函数,前面加两个下划线就代表是一个私有的,只能在类里面用。

什么是私有,私有就是只有在类里面可以访问,实例化之后不可以访问和调用,有私有方法和私有属性。私有就把变量名或者函数名前面加上"__"两个下划线,其实就是通过私有来实现封装的。

继承

一个类可以派生出子类,在这个父类里定义的属性、方法自动被子类继承。比如说你继承了你父亲的姓。

python3中多继承都是广度优先,python2中经典类的多继承是深度优先,新式类的多继承是按照广度优先的。

继承是为了代码的重用

super():找到父类的方法,在父类的功能基础上增加新的功能,原来父类有的功能还想保留,但是还想增加新的方法。

super代表父类这个类名

在父类某个方法的基础上再增加新功能:

super().xxx()

super()会自动找到父类

python对象编程例子-python(十二)面向对象编程、类相关推荐

  1. [Python从零到壹] 十二.机器学习之回归分析万字总结全网首发(线性回归、多项式回归、逻辑回归)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  2. 章节十二:编程思维:如何debug

    章节十二:编程思维:如何debug 目录 章节十二:编程思维:如何debug 1. bug 1:粗心 2. bug 2:知识不熟练 3. bug 3:思路不清 4. bug 4:被动掉坑 5. 习题练 ...

  3. VML极道教程(十二) VML编程大结局

    本系列文章导航 VML极道教程(一) VML介绍 VML极道教程(二) VML入门 VML极道教程(三) 标记实战与line线 VML极道教程(四) oval圆rect矩型 VML极道教程(五) Ro ...

  4. C语言编程>第二十二周 ④ 从键盘输入一组小写字母,保存在字符数组str中,请补充fun函数,该函数的功能是:把字符数组str中字符下标为偶数的小写字母转换成对应的大写字母,结果仍保存在原数组

    例题:从键盘输入一组小写字母,保存在字符数组str中,请补充fun函数,该函数的功能是:把字符数组str中字符下标为偶数的小写字母转换成对应的大写字母,结果仍保存在原数组中. 例如,输入 " ...

  5. C语言编程>第二十二周 ⑥ 请补充fun函数,该函数的功能是:把字符下标能被2和3同时整除的字符从字符串s中删除,把剩余的字符重新保存在字符串s中。

    例题:请补充fun函数,该函数的功能是:把字符下标能被2和3同时整除的字符从字符串s中删除,把剩余的字符重新保存在字符串s中.字符串s从键盘输入,其长度作为参数传入fun函数. 例如,输入 " ...

  6. C语言编程>第二十二周 ③ 下列给定的程序中,函数fun的功能是根据整型形参n,计算如下公式的值:

    例题:下列给定的程序中,函数fun的功能是根据整型形参n,计算如下公式的值: 例如,若n=1000,则应输出0.000155. 注意:不要改动main函数,不能增行或删行,也不能更改程序的结构. 代码 ...

  7. C语言编程>第十二周 ③ 已知学生的记录由学号和学习成绩构成,M名学生的数据已存入a结构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数。

    已知学生的记录由学号和学习成绩构成,M名学生的数据已存入a结构体数组中.请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分).已给出函数的首部,请完成该函 ...

  8. C语言编程>第二十二周 ① 下列给定程序中,函数fun的功能是:找出一个大于给定整数n且紧随n的素数,并作为函数值返回。

    例题:下列给定程序中,函数fun的功能是:找出一个大于给定整数n且紧随n的素数,并作为函数值返回. 例如,输入 整数为32,则输出的数素数为37". 注意:不要改动main函数,不能增行或删 ...

  9. python3面向对象编程第二版pdf_Python 3 面向对象编程(第2版)

    第1章  面向对象设计 1 面向对象 1 对象和类 3 指定属性和行为 5 数据描述对象 5 行为就是动作 7 隐藏细节并创建公共接口 8 组合 11 继承 13 继承提供抽象 15 多重继承 16 ...

  10. Matlab AppDesigner编程教程第1章——面向对象编程

    Matlab AppDesigner编程教程第1章--面向对象编程 文章目录 Matlab AppDesigner编程教程第1章--面向对象编程 前言 一.什么是面向对象编程 二.使用步骤 1.新建类 ...

最新文章

  1. ExtJS 4.2菜单
  2. java async mysql,java-Spring MVC Async任务同步运行
  3. 组会20211008《kEMPO1粒子模拟核心代码注释》
  4. mysql flask-login_Flask web模板六–Flask-Login完成登录验证
  5. 用Heartbeat实现web服务器高可用
  6. 最新数据:中国网民超10亿,中老年群体增速最快
  7. C语言函数指针命令行参数
  8. HTMLParser使用
  9. 计算机网络学习笔记(15. OSI参考模型③、TCP/IP参考模型)
  10. 20种语言说圣诞快乐
  11. thinkphp5 一周学习总结 10月12日
  12. macbook pro M1Pro安装java开发环境,jdk和eclipse安装包快速下载方式
  13. JMeter下载及安装详细教程
  14. 05二项式系数Cnk.md
  15. music-dl - 利用Python下载全网最优音质歌曲的工具
  16. Liunx Mint下载方案Aria2、web面板AriaNG搭建
  17. 句子改写器在线转换v.1.2.3
  18. raid, scsi_host pics
  19. 利用jmeter完成简单的压力测试
  20. Linux系统 | vim配置

热门文章

  1. 终端不能联网_详细解析物联网是什么?
  2. 为什么爬虫用python不用java_为什么常用Python,Java做爬虫,而不是C#C++等
  3. elasticsearch term match multi_match区别
  4. rem是如何实现自适应布局的
  5. uglifyjs压缩js文件
  6. [HTML/CSS]colum-gap属性
  7. db2表结构导出导入,数据库备份
  8. app让个别界面横屏,其他的为竖屏,解决如下
  9. 字符串按长度转换成数组
  10. 每天一点小知识004--关于获取物体名字