简述Python中的面向对象编程的概念


Posted in Python onApril 27, 2015

面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。

面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。

而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。

在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。

我们以一个例子来说明面向过程和面向对象在程序流程上的不同之处。

假设我们要处理学生的成绩表,为了表示一个学生的成绩,面向过程的程序可以用一个dict表示:

std1 = { 'name': 'Michael', 'score': 98 }
std2 = { 'name': 'Bob', 'score': 81 }

而处理学生成绩可以通过函数实现,比如打印学生的成绩:

def print_score(std):
  print '%s: %s' % (std['name'], std['score'])

如果采用面向对象的程序设计思想,我们首选思考的不是程序的执行流程,而是Student这种数据类型应该被视为一个对象,这个对象拥有name和score这两个属性(Property)。如果要打印一个学生的成绩,首先必须创建出这个学生对应的对象,然后,给对象发一个print_score消息,让对象自己把自己的数据打印出来。

class Student(object):

  def __init__(self, name, score):
    self.name = name
    self.score = score

  def print_score(self):
    print '%s: %s' % (self.name, self.score)

给对象发消息实际上就是调用对象对应的关联函数,我们称之为对象的方法(Method)。面向对象的程序写出来就像这样:

bart = Student('Bart Simpson', 59)
lisa = Student('Lisa Simpson', 87)
bart.print_score()
lisa.print_score()

面向对象的设计思想是从自然界中来的,因为在自然界中,类(Class)和实例(Instance)的概念是很自然的。Class是一种抽象概念,比如我们定义的Class——Student,是指学生这个概念,而实例(Instance)则是一个个具体的Student,比如,Bart Simpson和Lisa Simpson是两个具体的Student:

所以,面向对象的设计思想是抽象出Class,根据Class创建Instance。

面向对象的抽象程度又比函数要高,因为一个Class既包含数据,又包含操作数据的方法。
小结

数据封装、继承和多态是面向对象的三大特点,我们后面会详细讲解。

Python 相关文章推荐
Python读取Excel的方法实例分析
Jul 11 Python
Tensorflow加载预训练模型和保存模型的实例
Jul 27 Python
使用Py2Exe for Python3创建自己的exe程序示例
Oct 31 Python
Python实现EXCEL表格的排序功能示例
Jun 25 Python
Python代码太长换行的实现
Jul 05 Python
python多任务之协程的使用详解
Aug 26 Python
python 模拟贷款卡号生成规则过程解析
Aug 30 Python
TensorBoard 计算图的查看方式
Feb 15 Python
python3安装OCR识别库tesserocr过程图解
Apr 02 Python
python语言是免费还是收费的?
Jun 15 Python
Python3以GitHub为例来实现模拟登录和爬取的实例讲解
Jul 30 Python
Python 视频画质增强
Apr 28 Python
介绍Python中的__future__模块
Apr 27 #Python
在Python中使用第三方模块的教程
Apr 27 #Python
在Python中使用模块的教程
Apr 27 #Python
详细介绍Python中的偏函数
Apr 27 #Python
举例讲解Python中装饰器的用法
Apr 27 #Python
Python中的匿名函数使用简介
Apr 27 #Python
Python中用函数作为返回值和实现闭包的教程
Apr 27 #Python
You might like
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
PHP学习 变量使用总结
2011/03/24 PHP
安装apache2.2.22配置php5.4(具体操作步骤)
2013/06/26 PHP
php缩小png图片不损失透明色的解决方法
2013/12/25 PHP
ThinkPHP在新浪SAE平台的部署实例
2014/10/31 PHP
ThinkPHP5.0框架验证码功能实现方法【基于第三方扩展包】
2019/03/11 PHP
web前端开发也需要日志
2010/12/09 Javascript
javascript实现TreeView 无刷新展开的实例代码
2013/07/13 Javascript
简单的Jquery遮罩层代码实例
2013/11/14 Javascript
深入理解JQuery keyUp和keyDown的区别
2013/12/12 Javascript
jquery仅用6行代码实现滑动门效果
2015/09/07 Javascript
基于jquery实现瀑布流布局
2020/06/28 Javascript
详解在React.js中使用PureComponent的重要性和使用方式
2018/07/10 Javascript
vue 详情跳转至列表页实现列表页缓存
2019/03/27 Javascript
nodejs实现用户登录路由功能
2019/05/22 NodeJs
了解javascript中变量及函数的提升
2019/05/27 Javascript
在vue中利用v-html按分号将文本换行的例子
2019/11/14 Javascript
[02:16]DOTA2超级联赛专访Burning 逆袭需要抓住机会
2013/06/24 DOTA
Python实现动态添加类的属性或成员函数的解决方法
2014/07/16 Python
Django实现简单分页功能的方法详解
2017/12/05 Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
2018/01/11 Python
python安装教程
2018/02/28 Python
python实现人民币大写转换
2018/06/20 Python
python实现多人聊天室
2020/03/31 Python
python截取两个单词之间的内容方法
2018/12/25 Python
[机器视觉]使用python自动识别验证码详解
2019/05/16 Python
Python3.7在anaconda里面使用IDLE编译器的步骤详解
2020/04/29 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
html5指南-4.使用Geolocation实现定位功能
2013/01/07 HTML / CSS
详解三种方式实现平滑滚动页面到顶部的功能
2019/04/23 HTML / CSS
HelloFresh澳大利亚:订购你的美味食品盒、健康餐食
2018/03/28 全球购物
银行柜员应聘推荐信范文
2013/11/24 职场文书
供用电专业求职信
2014/07/07 职场文书
毕业生对母校寄语
2015/02/26 职场文书
同事欢送会致辞
2015/07/31 职场文书
详解MySQL数据库千万级数据查询和存储
2021/05/18 MySQL