简述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基础教程之python消息摘要算法使用示例
Feb 10 Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
Mar 20 Python
Python之web模板应用
Dec 26 Python
python抓取京东小米8手机配置信息
Nov 13 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
Jan 29 Python
Python 脚本实现淘宝准点秒杀功能
Nov 13 Python
Python 模拟动态产生字母验证码图片功能
Dec 24 Python
Tensorflow的常用矩阵生成方式
Jan 04 Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
Apr 21 Python
Django中ORM找出内容不为空的数据实例
May 20 Python
python interpolate插值实例
Jul 06 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
php HandlerSocket的使用
2011/05/02 PHP
php中将一段数据存到一个txt文件中并显示其内容
2014/08/15 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
2019/10/18 PHP
jQuery Ajax 全解析
2009/02/08 Javascript
JavaScript基本的输出和嵌入式写法教程
2015/10/20 Javascript
jQuery EasyUI 布局之动态添加tabs标签页
2015/11/18 Javascript
基于Vue2.0的分页组件
2017/03/16 Javascript
JQuery 获取Dom元素的实例讲解
2017/07/08 jQuery
Node.js+Express+MySql实现用户登录注册功能
2017/07/10 Javascript
js禁止浏览器页面后退功能的实例(推荐)
2017/09/01 Javascript
iframe与主框架跨域相互访问实现方法
2017/09/14 Javascript
微信小程序实现页面跳转传值以及获取值的方法分析
2017/12/18 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
2018/05/21 Javascript
JS判断用户用的哪个浏览器实例详解
2018/10/09 Javascript
jQuery zTree树插件的使用教程
2019/08/16 jQuery
微信小程序按钮点击动画效果的实现
2019/09/04 Javascript
js实现左右轮播图
2020/01/09 Javascript
Openlayers绘制地图标注
2020/09/28 Javascript
小程序中手机号识别的示例
2020/12/14 Javascript
Python 自动安装 Rising 杀毒软件
2009/04/24 Python
pandas数值计算与排序方法
2018/04/12 Python
基于python绘制科赫雪花
2018/06/22 Python
Laravel框架表单验证格式化输出的方法
2019/09/25 Python
Python实现查找数据库最接近的数据
2020/06/08 Python
解决Keras 中加入lambda层无法正常载入模型问题
2020/06/16 Python
希尔顿酒店中国网站:Hilton中国
2017/03/11 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2013/01/18 面试题
大学教师年终总结的自我评价
2013/10/29 职场文书
高二历史教学反思
2014/01/25 职场文书
教学改革问题查摆整改措施
2014/09/27 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书
客房领班岗位职责
2015/02/11 职场文书
PHP对接阿里云虚拟号的实现(号码隐私保护)
2021/04/06 PHP
《暗黑破坏神2:重制版》本周进行第一轮A测 目前可官网进行申请报名
2021/04/07 其他游戏
python实现剪贴板的操作
2021/07/01 Python
深入理解go slice结构
2021/09/15 Golang