简述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删除列表内容
Aug 04 Python
python学习 流程控制语句详解
Jun 01 Python
通过Python 接口使用OpenCV的方法
Apr 02 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
Jun 27 Python
Python读取txt内容写入xls格式excel中的方法
Oct 11 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
Oct 14 Python
PYQT5设置textEdit自动滚屏的方法
Jun 14 Python
python gensim使用word2vec词向量处理中文语料的方法
Jul 05 Python
Python合并2个字典成1个新字典的方法(9种)
Dec 19 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
Feb 28 Python
终于搞懂了Keras中multiloss的对应关系介绍
Jun 22 Python
如何基于Python实现word文档重新排版
Sep 29 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的Yii框架中的日志功能
2016/03/17 PHP
Thinkphp 框架扩展之标签库驱动原理与用法分析
2020/04/23 PHP
驱动事件的addEvent.js代码
2007/03/27 Javascript
23个Javascript弹出窗口特效整理
2011/02/25 Javascript
JavaScript基本编码模式小结
2012/05/23 Javascript
深入理解javascript变量声明
2014/11/20 Javascript
跟我学习javascript解决异步编程异常方案
2015/11/23 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
JS获取input file绝对路径的方法(推荐)
2016/08/02 Javascript
jquery实现手机端单店铺购物车结算删除功能
2017/02/22 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
node.js基于fs模块对系统文件及目录进行读写操作的方法详解
2017/11/10 Javascript
webpack+react+antd脚手架优化的方法
2018/04/02 Javascript
python求素数示例分享
2014/02/16 Python
Python黑帽编程 3.4 跨越VLAN详解
2016/09/28 Python
python读取文本中数据并转化为DataFrame的实例
2018/04/10 Python
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
Python3实现获取图片文字里中文的方法分析
2018/12/13 Python
解决使用PyCharm时无法启动控制台的问题
2019/01/19 Python
python游戏开发的五个案例分享
2020/03/09 Python
Django choices下拉列表绑定实例
2020/03/13 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
2020/06/10 Python
html2canvas把div保存图片高清图的方法示例
2018/03/05 HTML / CSS
DC Shoes官网:美国滑板鞋和服饰品牌
2017/09/03 全球购物
Microsoft Advertising美国:微软搜索广告
2019/05/01 全球购物
应届毕业生求职信
2013/11/30 职场文书
应付会计岗位职责
2013/12/12 职场文书
意向协议书范本
2014/04/23 职场文书
计算机系本科生求职信
2014/05/31 职场文书
领导班子个人查摆问题对照检查材料
2014/10/02 职场文书
工作表扬信范文
2015/01/17 职场文书
九九重阳节致辞
2015/07/31 职场文书
2016新教师培训心得体会范文
2016/01/08 职场文书
Redis实现一个账号只能登录一个设备
2022/04/19 Redis
Rust中的Struct使用示例详解
2022/08/14 Javascript