简述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中让MySQL查询结果返回字典类型的方法
Aug 22 Python
python3设计模式之简单工厂模式
Oct 17 Python
Python简单爬虫导出CSV文件的实例讲解
Jul 06 Python
python 模拟创建seafile 目录操作示例
Sep 26 Python
python 图片二值化处理(处理后为纯黑白的图片)
Nov 01 Python
YUV转为jpg图像的实现
Dec 09 Python
python实现上传文件到linux指定目录的方法
Jan 03 Python
PyTorch的SoftMax交叉熵损失和梯度用法
Jan 15 Python
django自定义非主键自增字段类型详解(auto increment field)
Mar 30 Python
python 6行代码制作月历生成器
Sep 18 Python
python中threading和queue库实现多线程编程
Feb 06 Python
Pygame Time时间控制的具体使用详解
Nov 17 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+AJAX实现无刷新注册(带用户名实时检测)
2006/12/02 PHP
PHP CLI模式下的多进程应用分析
2013/06/03 PHP
Yii2超好用的日期和时间组件(值得收藏)
2016/05/05 PHP
通过php动态传数据到highcharts
2017/04/05 PHP
走出JavaScript初学困境—js初学
2008/12/29 Javascript
图片轮换效果实现代码(点击按钮停止执行)
2013/04/12 Javascript
jQuery中bind,live,delegate与one方法的用法及区别解析
2013/12/30 Javascript
JQuery插件jcarousellite的参数中文说明
2015/05/11 Javascript
javascript实现多栏闭合展开式广告位菜单效果实例
2015/08/05 Javascript
JavaScript组件开发完整示例
2015/12/15 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
基于jquery实现智能表单验证操作
2016/05/09 Javascript
js定义类的几种方法(推荐)
2016/06/08 Javascript
jQuery实现微信长按识别二维码功能
2016/08/26 Javascript
Angular中使用better-scroll插件的方法
2018/03/27 Javascript
搭建一个Koa后端项目脚手架的方法步骤
2019/05/30 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
2019/09/20 Javascript
layui监听select变化,以及设置radio选中的方法
2019/09/24 Javascript
[47:45]Liquid vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
pycharm远程调试openstack代码
2017/11/21 Python
python如何通过twisted实现数据库异步插入
2018/03/20 Python
Django进阶之CSRF的解决
2018/08/01 Python
解决每次打开pycharm直接进入项目的问题
2018/10/28 Python
python3用PIL把图片转换为RGB图片的实例
2019/07/04 Python
解决tensorflow训练时内存持续增加并占满的问题
2020/01/19 Python
python对文件的操作方法汇总
2020/02/28 Python
丝芙兰美国官网:SEPHORA美国
2016/08/03 全球购物
美国最大的无人机经销商:DroneNerds
2018/03/20 全球购物
大学毕业生通用自我评价
2014/01/05 职场文书
交通安全演讲稿
2014/01/07 职场文书
酒店管理毕业生自荐信
2014/05/25 职场文书
总经理人事任命书
2014/06/05 职场文书
《普罗米修斯》教学反思
2016/02/22 职场文书
大学学生会主席竞选稿怎么写?
2019/08/19 职场文书
Python中glob库实现文件名的匹配
2021/06/18 Python