简述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 相关文章推荐
Numpy掩码式数组详解
Apr 17 Python
python遍历一个目录,输出所有的文件名的实例
Apr 23 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
May 04 Python
PHP实现发送和接收JSON请求
Jun 07 Python
Python3.6使用tesseract-ocr的正确方法
Oct 17 Python
python设置环境变量的原因和方法
Jun 24 Python
Django认证系统user对象实现过程解析
Mar 02 Python
python实现文法左递归的消除方法
May 22 Python
pycharm 实现本地写代码,服务器运行的操作
Jun 08 Python
django创建css文件夹的具体方法
Jul 31 Python
Python调用系统命令os.system()和os.popen()的实现
Dec 31 Python
通过Python把学姐照片做成拼图游戏
Feb 15 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 ss7.5的数据调用 (笔记)
2010/03/08 PHP
php 搜索框提示(自动完成)实例代码
2012/02/05 PHP
php生成N个不重复的随机数实例
2013/11/12 PHP
php的hash算法介绍
2014/02/13 PHP
php实现singleton()单例模式实例
2014/11/06 PHP
php将文本文件转换csv输出的方法
2014/12/31 PHP
PHP中读取文件的几个方法总结(推荐)
2016/06/03 PHP
thinkPHP js文件中U方法不被解析问题的解决方法
2016/12/05 PHP
jQuery选择器中含有空格的使用示例及注意事项
2013/08/25 Javascript
JavaScript字符串对象replace方法实例(用于字符串替换或正则替换)
2014/10/16 Javascript
jQuery中 delegate使用的问题
2015/07/03 Javascript
jquery中的常见问题及快速解决方法小结
2016/06/14 Javascript
node.js与C语言 实现遍历文件夹下最大的文件,并输出路径,大小
2017/01/20 Javascript
vue.js树形组件之删除双击增加分支实例代码
2017/02/28 Javascript
jQuery实现IE输入框完成placeholder标签功能的方法
2017/09/20 jQuery
详解webpack与SPA实践之开发环境搭建
2017/12/18 Javascript
vue实现购物车抛物线小球动画效果的方法详解
2019/02/13 Javascript
Vue Object 的变化侦测实现代码
2020/04/15 Javascript
jQuery实现雪花飘落效果
2020/08/02 jQuery
Vue 实现对quill-editor组件中的工具栏添加title
2020/08/03 Javascript
vue实现动态给id赋值,点击事件获取当前点击的元素的id操作
2020/11/09 Javascript
python将MongoDB里的ObjectId转换为时间戳的方法
2015/03/13 Python
python 使用get_argument获取url query参数
2017/04/28 Python
Python socket套接字实现C/S模式远程命令执行功能案例
2018/07/06 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
2019/04/18 Python
简单了解django索引的相关知识
2019/07/17 Python
Python Opencv提取图片中某种颜色组成的图形的方法
2019/09/19 Python
马来西亚在线购物市场:PGMall.my
2019/10/13 全球购物
英国在线滑雪板和冲浪商店:The Board Basement
2020/01/11 全球购物
初三学习决心书
2014/03/11 职场文书
2014年医院后勤工作总结
2014/12/06 职场文书
2015年全国保险公众宣传日活动方案
2015/05/06 职场文书
学生犯错保证书
2015/05/09 职场文书
2016年记者节感言
2015/12/08 职场文书
python函数指定默认值的实例讲解
2021/03/29 Python
MySQL基础(二)
2021/04/05 MySQL