python是一种面向对象的语言。面向对象程序设计中的术语对象基本上可以看做数据(特性)以及由一系列可以存取、操作这些数据的方法所组成的集合。使用对象替代全局变量和函数的原因可能有很多,其中对象最重要的优点包括三个方面:

  1. 多态:可以对不同类的对象使用同样的操作
  2. 封装:对外部世界隐藏对象的工作细节
  3. 继承:以普通的类为基础建立专门的类对象

多态和方法

程序得到了一个对象,不知道它是怎么实现的,它可能有多种"形状"。

绑定到对象特性上面的函数称为方法。

>>> 'abc'.count('a')
1
>>> [1,2,'a'].count('a')
1

对应变量x来说,不需要知道它是字符串还是列表,就可以调用它的count方法,不用管它是什么类型

举例,标准库random中包含choice函数,可以从序列中随机选出元素。给变量赋值:

>>> from random import choice
>>> x=choice(['Hello,world!',[1,2,'e','e',4]])

运行后,变量x随机选择一个值

>>> x.count('e')
1
>>> x
'Hello,world!'
>>> 

多态的多种形式

任何不知道对象到底是什么类型,但是又要对对象操作时,都会用到多态。

>>> 1+2
3
>>> 'Hello,'+'world'
'Hello,world'

>>> add(1,2)
3
>>> add('Hello,','world')
'Hello,world'

参数可以是任何支持加法的对象。

编写打印对象长度消息的函数

>>> def length_message(x):print "The length of",repr(x),"is",len(x)

函数中使用了repr函数,repr函数是多态特性的代表之一

>>> length_message('Fnord')
The length of 'Fnord' is 5
>>> length_message([1,2,3])
The length of [1, 2, 3] is 3

封装

封装是对全局作用域中其他区域隐藏多余信息的原则。不用关心对象是如何构建的而直接进行使用

假设有一个叫做OpenObject的类:

>>> o=OpenObject()
>>> o.setName('Sir Lancelot')
>>> o.getName() #此案例并不能运行成功,只是假设
'Sir Lancelot'

创建了一个对象后,将变量o绑定到该对象上。可以使用setName和getName方法(假设已经由OpenObject类提供)。

假如变量o将它的名字存储在全局变量globalName中:

在使用OpenObject类的实例时,不得不关心globalName的内容。

>>> globalName
'Sir Lancelot'
>>> globalName='Sir Gumby'
>>> o.getName()
'Sir Gumby'

如果创建了多个OpenObject实例会出现问题

>>> o1=OpenObject()
>>> o2=OpenObject()
>>> o1.setName('Robin Hood')
>>> o2.getName()
'Robin Hood'

如果不用全局变量而用特性重写类,并且重命名为ClosedObject

>>> c=ClosedObject()
>>> c.setName('Sir Lancelot')
>>> c.getName()
'Sir Lancelot'>>> r=ClosedObject()
>>> r.setName('Sir Robin')
>>> r.getName()
'Sir Robin>>> c.getName()
'Sir Lancelot'

继承

如果已经有了一个类,又想建立一个新的类似的类,让新的类从老的类中继承方法,新的类增加几个方法

转载于:https://www.cnblogs.com/nsds/p/6489790.html

python中对象的多态、封装、继承介绍相关推荐

  1. 详解python中GPU版本的opencv常用方法介绍

    更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接:好看站 http://www.nrso.net/ 高州阳光论坛https://www.hnthzk.com/ 引 ...

  2. python中的内置函数getattr()介绍及示例

    python中的内置函数getattr()介绍及示例 其实getattr()这个方法最主要的作用是实现反射机制.也就是说可以通过字符串获取方法实例.这样,你就可以把一个类可能要调用的方法放在配置文件里 ...

  3. python数组用sum求和_对python中array.sum(axis=?)的用法介绍

    根据代码中运行的结果来看,主要由以下几种: 1. sum():将array中每个元素相加的结果 2. axis对应的是维度的相加. 比如: 1.axis=0时,对饮搞得是第一个维度元素的相加, [[0 ...

  4. python中对象的定义_python中对象的定义和使用

    python中对象的定义和使用 发布时间:2020-06-22 11:57:16 来源:亿速云 阅读:98 作者:Leah 今天就跟大家聊聊有关python中对象的定义和使用,可能很多人都不太了解,为 ...

  5. python中对象的特性_python中类与对象之继承,python类和对象理解,面对对象的三大特性之...

    python中类与对象之继承,python类和对象理解,面对对象的三大特性之 面对对象的三大特性之继承 1.什么是继承? 在程序中,继承指的是class与class之间的关系 继承是一种关系,必须存在 ...

  6. python中对象的概念是什么_python面向对象编程的基本概念

    作者|HIMANSHI SINGH 编译|VK 来源|Analytics Vidhya 介绍 在学习面向对象编程时,我决定深入研究它的历史,结果发现它很迷人.术语"面向对象编程"( ...

  7. python中对象的特性_python面对对象-三大特性

    python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到一个对象中. 把固定功能的代码封装到一个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情况具体分 ...

  8. python中对象的概念是什么_简述Python中的面向对象编程的概念

    面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机 ...

  9. [机器学习]Python中Numpy,Pandas,Matplotlib,Scipy,Seaborn介绍

    Python做数据挖掘很强大,最近几年很火的机器学习以及较为前沿的自然语言处理也会选用Python作为基础工具. 其中python做数据挖掘足够强大,不用怀疑. #1. Numpy介绍 Numpy是P ...

最新文章

  1. Nginx负载均衡集群介绍
  2. 【机器学习】libsvm使用的数据格式
  3. jquery 设置checkbox的checked属性 总是出问题
  4. ASP.NET前台JS与后台CS函数如何互相调用
  5. 2019云栖大会精品资料免费下载
  6. C++const的作用与使用
  7. uva 138——Street Numbers
  8. 图像的通道(channels)问题
  9. Spring - Netty (整合)
  10. PAT甲级题目对应知识点分类梳理
  11. 两个队列实现一个栈(Java)
  12. C# 实验五 银行系统
  13. 对于企业是云服务器划算还是自购服务器划算?
  14. CPU彪高分析及解决
  15. 使用Opencv+VS2015做数字图像识别
  16. numpy下 随机抽样
  17. jzoj4879. 少女觉
  18. gifcam使用缩小内存_GifCam使用方法
  19. xplorer spill address
  20. ROM制作---强制默认打开安卓最下方的虚拟按键和默认输入法修改

热门文章

  1. python第6-7轮作业--字符串,模块
  2. BMS 产品控制策略和整车交互策略
  3. 敏捷遇上UML(深圳 2014.3.15)- 活动报道
  4. 共模电流抑制思路小结
  5. php实现图片的翻滚,css实现图片滚动 - 我是希希呀的个人空间 - OSCHINA - 中文开源技术交流社区...
  6. Java八个基本数据类型所占字节数
  7. 怎么对10亿个电话号码进行去重
  8. 单缝斜入射衍射_傅里叶变换解夫琅禾费衍射问题的几个例子_2
  9. linux/php一句话图片马及实例
  10. Windows ICON 详解