简述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文件和目录操作函数小结
Jul 11 Python
python嵌套函数使用外部函数变量的方法(Python2和Python3)
Jan 31 Python
Python实现基本数据结构中栈的操作示例
Dec 04 Python
Python实现简易Web爬虫详解
Jan 03 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
Apr 02 Python
用Python写一段用户登录的程序代码
Apr 22 Python
flask入门之文件上传与邮件发送示例
Jul 18 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
Oct 16 Python
Python之pymysql的使用小结
Jul 01 Python
python格式化输出保留2位小数的实现方法
Jul 02 Python
Python库安装速度过慢解决方案
Jul 14 Python
Linux安装Python3如何和系统自带的Python2并存
Jul 23 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 模拟$_PUT实现代码
2010/03/15 PHP
php Notice: Undefined index 错误提示解决方法
2010/08/29 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
PHP单例模式定义与使用实例详解
2017/02/06 PHP
PHPCMS手机站伪静态设置详细教程
2017/02/06 PHP
php中用unset销毁变量并释放内存
2020/05/10 PHP
jqGrid中文文档之选项设置
2015/12/02 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
2015/12/31 Javascript
基于Bootstrap实现图片轮播效果
2016/05/22 Javascript
bootstrap学习笔记之初识bootstrap
2016/06/21 Javascript
jQuery表单事件实例代码分享
2016/08/18 Javascript
webpack常用配置项配置文件介绍
2016/11/07 Javascript
详解使用vue脚手架工具搭建vue-webpack项目
2017/05/10 Javascript
关于TypeScript中import JSON的正确姿势详解
2017/07/25 Javascript
详解.vue文件中监听input输入事件(oninput)
2017/09/19 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
2018/01/24 Javascript
对layui中table组件工具栏的使用详解
2019/09/19 Javascript
vue.js实现h5机器人聊天(测试版)
2020/07/16 Javascript
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
2021/02/20 Vue.js
[01:09]DOTA2次级职业联赛 - ishow.HMM战队宣传片
2014/12/01 DOTA
[02:07]2017国际邀请赛中国区预选赛直邀战队前瞻
2017/06/23 DOTA
[01:13:01]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第三场
2018/04/05 DOTA
零基础写python爬虫之神器正则表达式
2014/11/06 Python
Python实现公历(阳历)转农历(阴历)的方法示例
2017/08/22 Python
Python hashlib模块用法实例分析
2018/06/12 Python
Python多进程写入同一文件的方法
2019/01/14 Python
python进阶之自定义可迭代的类
2019/08/20 Python
python3 实现函数写文件路径的正确方法
2019/11/27 Python
Python是什么 Python的用处
2020/05/26 Python
在keras中实现查看其训练loss值
2020/06/16 Python
python3实现简单飞机大战
2020/11/29 Python
SVG实现多彩圆环倒计时效果的示例代码
2017/11/21 HTML / CSS
英语商务邀请函范文
2014/01/16 职场文书
2014年公司植树节活动方案
2014/03/04 职场文书
计算机毕业生求职信
2014/06/10 职场文书
《田忌赛马》教学反思
2016/02/19 职场文书