简述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 相关文章推荐
matplotlib subplots 设置总图的标题方法
May 25 Python
详解Python中的type和object
Aug 15 Python
python安装pywin32clipboard的操作方法
Jan 24 Python
python之信息加密题目详解
Jun 26 Python
Python 分享10个PyCharm技巧
Jul 13 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
Jul 24 Python
django认证系统实现自定义权限管理的方法
Aug 28 Python
python3连接mysql获取ansible动态inventory脚本
Jan 19 Python
Python闭包及装饰器运行原理解析
Jun 17 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
Jul 07 Python
python按照list中字典的某key去重的示例代码
Oct 13 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
Mar 04 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和ACCESS写聊天室(四)
2006/10/09 PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
PHP MemCached 高级缓存应用代码
2010/08/05 PHP
php生成动态验证码gif图片
2015/10/19 PHP
PHP 断点续传实例详解
2017/11/11 PHP
PHP实现防止表单重复提交功能【基于token验证】
2018/05/24 PHP
使一个函数作为另外一个函数的参数来运行的javascript代码
2007/08/13 Javascript
子窗口、父窗口和Silverlight之间的相互调用
2010/08/16 Javascript
javascript 基础篇3 类,回调函数,内置对象,事件处理
2012/03/14 Javascript
修改file按钮的默认样式实现代码
2013/04/23 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
JQuery中绑定事件(bind())和移除事件(unbind())
2015/02/27 Javascript
Bootstrap开发实战之第一次接触Bootstrap
2016/06/02 Javascript
JavaScript 数组中最大最小值
2016/06/05 Javascript
JS实现星星评分功能实例代码(两种方法)
2016/06/09 Javascript
BootStrap实现带关闭按钮功能
2017/02/15 Javascript
js实现简单的二级联动效果
2017/03/09 Javascript
简单明了区分escape、encodeURI和encodeURIComponent
2018/05/26 Javascript
JS数组扁平化、去重、排序操作实例详解
2020/02/24 Javascript
基于JavaScript实现猜数字游戏代码实例
2020/07/30 Javascript
js实现数字跳动到指定数字
2020/08/25 Javascript
[31:47]夜魇凡尔赛茶话会 第三期01:选手知多少
2021/03/11 DOTA
详细介绍Python语言中的按位运算符
2013/11/26 Python
django-rest-swagger的优化使用方法
2019/08/29 Python
python区分不同数据类型的方法
2019/10/14 Python
可爱的童装和鞋子:Fabkids
2019/08/16 全球购物
Oral-B荷兰:牙医最推荐的品牌
2020/02/25 全球购物
学校运动会霸气口号
2014/06/07 职场文书
护理专业求职信
2014/06/15 职场文书
作风建设剖析材料
2014/10/06 职场文书
家庭财产分割协议范文
2014/11/24 职场文书
物业客服专员岗位职责
2015/04/07 职场文书
二审答辩状范文
2015/05/22 职场文书
重阳节活动主持词
2015/07/04 职场文书
超详细教你怎么升级Mysql的版本
2021/05/19 MySQL
OpenCV实现普通阈值
2021/11/17 Java/Android