简述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的subprocess模块总结
Nov 07 Python
Python利用多进程将大量数据放入有限内存的教程
Apr 01 Python
Python字符串逐字符或逐词反转方法
May 21 Python
OpenCV-Python实现轮廓检测实例分析
Jan 05 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
Feb 18 Python
python操作redis方法总结
Jun 06 Python
mac下pycharm设置python版本的图文教程
Jun 13 Python
python3 实现一行输入,空格隔开的示例
Nov 14 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
Jan 22 Python
django框架cookie和session用法实例详解
Dec 10 Python
jupyter notebook清除输出方式
Apr 10 Python
jupyter 导入csv文件方式
Apr 21 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判断数组元素中是否存在某个字符串的方法
2014/06/14 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
2017/05/03 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
2019/06/08 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
JQuery 表格操作(交替显示、拖动表格行、选择行等)
2009/07/29 Javascript
Jquery通过JSON字符串创建JSON对象
2014/08/24 Javascript
jQuery CSS3自定义美化Checkbox实现代码
2016/05/12 Javascript
使用递归遍历对象获得value值的实现方法
2016/06/14 Javascript
gulp-uglify 与gulp.watch()配合使用时报错(重复压缩问题)
2016/08/24 Javascript
使用JS 插件qrcode.js生成二维码功能
2017/02/20 Javascript
使用JavaScript实现表格编辑器(实例讲解)
2017/08/02 Javascript
ES6中字符串string常用的新增方法小结
2017/11/07 Javascript
JavaScript 数组去重并统计重复元素出现的次数实例
2017/12/14 Javascript
使用webpack搭建vue项目及注意事项
2019/06/10 Javascript
Vue开发环境中修改端口号的实现方法
2019/08/15 Javascript
jQuery实现移动端下拉展现新的内容回弹动画
2020/06/24 jQuery
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
2019/05/10 Python
梅尔倒谱系数(MFCC)实现
2019/06/19 Python
详解Python中Pyyaml模块的使用
2020/10/08 Python
俄罗斯街头服装品牌:Black Star Wear
2017/03/01 全球购物
Kent & Curwen:与大卫·贝克汉姆合作
2017/06/13 全球购物
美国时尚孕妇装品牌:A Pea in the Pod
2017/07/16 全球购物
英国最大的运动营养公司之一:LA Muscle
2018/07/02 全球购物
请解释virtual关键字的含义
2015/06/17 面试题
文明学生事迹材料
2014/01/29 职场文书
投资建议书模板
2014/05/12 职场文书
学校宣传标语
2014/06/18 职场文书
岗位工作说明书
2014/07/29 职场文书
2014办公室年度工作总结
2014/12/09 职场文书
利用python做表格数据处理
2021/04/13 Python
Django debug为True时,css加载失败的解决方案
2021/04/24 Python
pytorch加载预训练模型与自己模型不匹配的解决方案
2021/05/13 Python
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
2022/04/09 MySQL
python垃圾回收机制原理分析
2022/04/13 Python
Redis特殊数据类型bitmap位图
2022/06/01 Redis