简述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异步回调机制实现和使用方法
Nov 26 Python
python中lambda函数 list comprehension 和 zip函数使用指南
Sep 28 Python
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
Mar 30 Python
python中快速进行多个字符替换的方法小结
Dec 15 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
Oct 28 Python
在mac下查找python包存放路径site-packages的实现方法
Nov 06 Python
详解Python函数式编程—高阶函数
Mar 29 Python
Python利用for循环打印星号三角形的案例
Apr 12 Python
Jupyter notebook如何修改平台字体
May 13 Python
python中tkinter窗口位置\坐标\大小等实现示例
Jul 09 Python
python机器学习Github已达8.9Kstars模型解释器LIME
Nov 23 Python
Python+腾讯云服务器实现每日自动健康打卡
Dec 06 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
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
php中怎么搜索相关联数组键值及获取之
2013/10/17 PHP
PHP实现采集抓取淘宝网单个商品信息
2015/01/08 PHP
php程序内部post数据的方法
2015/03/31 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
JS+XML 省份和城市之间的联动实现代码
2009/10/14 Javascript
Javascript和Ajax中文乱码吐血版解决方案
2009/12/21 Javascript
Extjs中DisplayField的日期或者数字格式化扩展
2010/09/03 Javascript
jQuery实现冻结表头的方法
2015/03/09 Javascript
深入浅析JavaScript中prototype和proto的关系
2015/11/15 Javascript
浅析JS运动
2015/12/28 Javascript
Angularjs中UI Router的使用方法
2016/05/14 Javascript
Bootstrap自定义文件上传下载样式
2016/05/26 Javascript
angularJs关于指令的一些冷门属性详解
2016/10/24 Javascript
详解js静态资源文件请求的处理
2017/08/01 Javascript
element-ui 表格数据时间格式化的方法
2018/08/24 Javascript
详解小程序如何避免多次点击,重复触发事件
2019/04/08 Javascript
vue router总结 $router和$route及router与 router与route区别
2019/07/05 Javascript
Vue.js中的高级面试题及答案
2020/01/13 Javascript
python开发中module模块用法实例分析
2015/11/12 Python
asyncio 的 coroutine对象 与 Future对象使用指南
2016/09/11 Python
Python 专题一 函数的基础知识
2017/03/16 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
2018/09/25 Python
python如何给字典的键对应的值为字典项的字典赋值
2019/07/05 Python
TensorFlow查看输入节点和输出节点名称方式
2020/01/04 Python
斯洛伐克电子产品购物网站:DATART
2020/04/05 全球购物
煤矿班组长的职责
2013/12/25 职场文书
小学开学寄语
2014/01/19 职场文书
英语课前三分钟演讲稿
2014/08/19 职场文书
学历证明样本
2015/06/16 职场文书
敬老院活动感想
2015/08/07 职场文书
Django实现翻页的示例代码
2021/05/24 Python
python程序的组织结构详解
2021/12/06 Python
Python实现双向链表
2022/05/25 Python