Python使用类(class)和对象(object),进行面向对象(object-oriented programming,简称OOP)的编程。

面向对象的最主要目的是提高程序的重复使用性。我们这么早切入面向对象编程的原因是,Python的整个概念是基于对象的。了解OOP是进一步学习Python的关键。

下面是对面向对象的一种理解,基于分类。

相近对象,归为类

在人类认知中,会根据属性相近把东西归类,并且给类别命名。比如说,鸟类的共同属性是有羽毛,通过产卵生育后代。任何一只特别的鸟都在鸟类的原型基础上的。

面向对象就是模拟了以上人类认知过程。在Python语言,为了听起来酷,我们把上面说的“东西”称为对象(object)。

先定义鸟类

class Bird(object):have_feather = Trueway_of_reproduction  = 'egg'

我们定义了一个类别(class),就是鸟(Bird)。在隶属于这个类比的语句块中,我们定义了两个变量,一个是有羽毛(have_feather),一个是生殖方式(way_of_reproduction),这两个变量对应我们刚才说的属性(attribute)。我们暂时先不说明括号以及其中的内容,记为问题1。

假设我养了一只小鸡,叫summer。它是个对象,且属于鸟类。使用前面定义的类:

summer = Bird()
print summer.way_of_reproduction

通过第一句创建对象,并说明summer是类别鸟中的一个对象,summer就有了鸟的类属性,对属性的引用是通过 对象.属性(object.attribute) 的形式实现的。

可怜的summer,你就是个有毛产的蛋货,好不精致。

动作

日常认知中,我们在通过属性识别类别的时候,有时根据这个东西能做什么事情来区分类别。比如说,鸟会移动。这样,鸟就和房屋的类别区分开了。这些动作会带来一定的结果,比如移动导致位置的变化。

这样的一些“行为”属性为方法(method)。Python中通过在类的内部定义函数,来说明方法。

class Bird(object):have_feather = Trueway_of_reproduction = 'egg'def move(self, dx, dy):position = [0,0]position[0] = position[0] + dxposition[1] = position[1] + dyreturn positionsummer = Bird()
print 'after move:',summer.move(5,8)

我们重新定义了鸟这个类别。鸟新增一个方法属性,就是表示移动的方法move。(我承认这个方法很傻,你可以在看过下一讲之后定义个有趣些的方法)

(它的参数中有一个self,它是为了方便我们引用对象自身。方法的第一个参数必须是self,无论是否用到。有关self的内容会在下一讲展开)

另外两个参数,dx, dy表示在x、y两个方向移动的距离。move方法会最终返回运算过的position。

在最后调用move方法的时候,我们只传递了dx和dy两个参数,不需要传递self参数(因为self只是为了内部使用)。

我的summer可以跑了。

子类

类别本身还可以进一步细分成子类

比如说,鸟类可以进一步分成鸡,大雁,黄鹂。

在OOP中,我们通过继承(inheritance)来表达上述概念。

class Chicken(Bird):way_of_move = 'walk'possible_in_KFC = Trueclass Oriole(Bird):way_of_move = 'fly'possible_in_KFC = Falsesummer = Chicken()
print summer.have_feather
print summer.move(5,8)

新定义的鸡(Chicken)类的,增加了两个属性:移动方式(way_of_move),可能在KFC找到(possible_in_KFC)

在类定义时,括号里为了Bird。这说明,Chicken是属于鸟类(Bird)的一个子类,即Chicken继承自Bird。自然而然,Bird就是Chicken的父类。Chicken将享有Bird的所有属性。尽管我只声明了summer是鸡类,它通过继承享有了父类的属性(无论是变量属性have_feather还是方法属性move)

新定义的黄鹂(Oriole)类,同样继承自鸟类。在创建一个黄鹂对象时,该对象自动拥有鸟类的属性。

通过继承制度,我们可以减少程序中的重复信息和重复语句。如果我们分别定义两个类,而不继承自鸟类,就必须把鸟类的属性分别输入到鸡类和黄鹂类的定义中。整个过程会变得繁琐,因此,面向对象提高了程序的可重复使用性。

(回到问题1, 括号中的object,当括号中为object时,说明这个类没有父类(到头了))

将各种各样的东西分类,从而了解世界,从人类祖先开始,我们就在练习了这个认知过程,面向对象是符合人类思维习惯的。所谓面向过程,也就是执行完一个语句再执行下一个,更多的是机器思维。通过面向对象的编程,我们可以更方便的表达思维中的复杂想法。

总结

将东西根据属性归类 ( 将object归为class )

方法是一种属性,表示动作

用继承来说明父类-子类关系。子类自动具有父类的所有属性。

self代表了根据类定义而创建的对象。

建立对一个对象: 对象名 = 类名()

引用对象的属性: object.attribute

Python基础学习,面向对象的基本概念相关推荐

  1. Python基础08 面向对象的基本概念

    Python使用类(class)和对象(object),进行面向对象(object-oriented programming,简称OOP)的编程. 面向对象的最主要目的是提高程序的重复使用性.我们这么 ...

  2. Python基础学习——面向对象编程(第一讲:面向对象概述、面向对象三个基本特征(封装性、继承性、多态性)、类和对象(定义类、创建和使用对象、实例变量、类变量、构造方法、实例方法、类方法、静态方法))

    面向对象是Python最重要的特性,在Python中一切数据类型都是面向对象的. 1.面向对象概述 面向对象的编程思想是,按照真实世界客观事物的自然规律进行分析,客观世界中存在什么样的实体,构建软件系 ...

  3. python创建对象的格式为_Python入门基础学习(面向对象)

    python基础学习笔记(四) 面向对象的三个基本特征: 封装:把客观事物抽象并封装成对象,即将属性,方法和事件等集合在一个整体内 继承:允许使用现有类的功能并在无须重新改写原来的类情况下,对这些功能 ...

  4. python自学用什么书好-适合python基础学习的好书籍

    分享几本python基础学习的书籍给大家 <Python编程:从入门到实践> 内容简介:本书是一本针对所有层次的Python 读者而作的Python 入门书.全书分两部分:第一部分介绍用P ...

  5. python基础学习的书籍

    分享几本python基础学习的书籍给大家 <Python编程:从入门到实践> <Python编程:从入门到实践> 书籍详情链接 内容简介:本书是一本针对所有层次的Python ...

  6. 5.Python基础之面向对象

    文章目录 Python基础之面向对象 面向对象的三大特性 类和对象的关系 类的组成 类的书写规则 实例化对象 检测类和对象的成员 类和对象成员的操作 类成员操作 对象成员操作 关于self 封装特性 ...

  7. Python成长之路【第九篇】:Python基础之面向对象

    一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程–>错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个人 ...

  8. (转)Python成长之路【第九篇】:Python基础之面向对象

    一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...

  9. 8.Python基础学习笔记day8-正则表达式、网络编程、进程与线程

    8.Python基础学习笔记day8-正则表达式.网络编程.进程与线程 一.正则表达式 ''' 1. [1,2,3,4]中任意取3个元素排列: A43 = 4x3x2 = 24itertools.pe ...

  10. python心得体会-终于懂得python基础学习心得

    为了提高模块加载的速度,每个模块都会在__pycache__文件夹中放置该模块的预编译模块,命名为module.version.pyc,version是模块的预编译版本编码,一般都包含Python的版 ...

最新文章

  1. Google联手Facebook 要在AI研究上搞什么大事?
  2. Liunx UID and GID
  3. EM算法(Expectation Maximization Algorithm)
  4. Canvas Clock
  5. 通用运输APP/小型物流托运APP/客运班车APP/PHP+MYSQL管理后端
  6. Ubuntu下安装vim以及常用命令
  7. MySQL的chap服务器_路由器chap的双向配置命令
  8. JAVA高端编程研发培训班 JAVA开发视频教程
  9. 《HTTP权威指南》读书笔记
  10. webstorm 搜狗输入法,输入汉字变成繁体字
  11. 文件或目录损坏且无法读取android studio
  12. 两步解决【zabbix】Time zone for PHP is not set (configuration parameter “date.timezone”)
  13. Landsat系列卫星数据应用介绍
  14. 几种查询局域网内在线弱电设备IP地址的方法,总有一款你会用的到
  15. Mac笔记本常用软件
  16. 20-硬链接与软链接
  17. cmd端精简版扫雷= =(纯c)
  18. 用于欺诈检测的综合金融数据集
  19. 数据库DB之MySQLOracle
  20. pandas计算主力合约收益率

热门文章

  1. Hibernate-----5、持久化对象
  2. Windows Azure 部署 Windows 8 虚拟机
  3. 通过url传参实现多个页面使用同一个页面,再返回本页面
  4. showModalDialog模态对话框 的使用及一般问题的解决
  5. Cracking the Coding Interview(Stacks and Queues)
  6. Ucloud香港1h1g云服务器低至126元一年而且可开3年限时
  7. Nginx的HTTP负载平衡
  8. 十分钟教会你原生JS压缩图片,极其精简版
  9. Spring MVC异常处理 - @ ControllerAdvice,@ ExceptionHandler,HandlerExceptionResolver
  10. Spring Batch示例教程