简述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多进程通信Queue、Pipe、Value、Array实例
Nov 21 Python
python正则表达式re之compile函数解析
Oct 25 Python
python存储16bit和32bit图像的实例
Dec 05 Python
PyQt5 QTableView设置某一列不可编辑的方法
Jun 25 Python
PyCharm专业最新版2019.1安装步骤(含激活码)
Oct 09 Python
wxPython实现整点报时
Nov 18 Python
numpy:找到指定元素的索引示例
Nov 26 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
Apr 27 Python
python中os包的用法
Jun 01 Python
利用python下载scihub成文献为PDF操作
Jul 09 Python
Python项目打包成二进制的方法
Dec 30 Python
python树莓派通过队列实现进程交互的程序分析
Jul 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
世界收音机发展史
2021/03/01 无线电
使用YII2框架实现微信公众号中表单提交功能
2017/09/04 PHP
Thinkphp自定义生成缩略图尺寸的方法
2019/08/05 PHP
laravel 之 Eloquent 模型修改器和序列化示例
2019/10/17 PHP
一个对于Array的简单扩展
2006/10/03 Javascript
javascript Onunload与Onbeforeunload使用小结
2009/12/31 Javascript
jquery实现网站超链接和图片提示效果
2013/03/21 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
javascript模拟php函数in_array
2015/04/27 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
BootStrap轻松实现微信页面开发代码分享
2016/10/21 Javascript
jQuery向webApi提交post json数据
2017/01/16 Javascript
bootstrap 模态框(modal)实现水平垂直居中显示
2017/01/23 Javascript
Vue分页组件实例代码
2017/04/17 Javascript
vue页面切换到滚动页面显示顶部的实例
2018/03/13 Javascript
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
JavaScript实现轮播图特效
2020/04/10 Javascript
javascript实现图片轮换动作方法
2020/08/07 Javascript
[48:28]完美世界DOTA2联赛循环赛FTD vs Magma第二场 10月30日
2020/10/31 DOTA
在RedHat系Linux上部署Python的Celery框架的教程
2015/04/07 Python
Python常用小技巧总结
2015/06/01 Python
Python lxml模块安装教程
2015/06/02 Python
Python实现查找数组中任意第k大的数字算法示例
2019/01/23 Python
Python实现计算对象的内存大小示例
2019/07/10 Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
2020/06/02 Python
在keras里实现自定义上采样层
2020/06/28 Python
PyQt5多线程防卡死和多窗口用法的实现
2020/09/15 Python
Pycharm自动添加文件头注释和函数注释参数的方法
2020/10/23 Python
使用PyCharm官方中文语言包汉化PyCharm
2020/11/18 Python
使用HTML5 Canvas为图片填充颜色和纹理的教程
2016/03/21 HTML / CSS
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
同程旅游英文网站:LY.com
2018/11/13 全球购物
国贸专业的职业规划范文
2014/01/23 职场文书
2015年建筑工程工作总结
2015/05/13 职场文书
SpringRetry重试框架的具体使用
2021/07/25 Java/Android
win10重装系统后上不了网怎么办 win10重装系统网络故障的解决办法
2022/07/23 数码科技