Python 面向对象之封装、继承、多态操作实例分析


Posted in Python onNovember 21, 2019

本文实例讲述了Python 面向对象之封装、继承、多态操作。分享给大家供大家参考,具体如下:

封装、继承、多态 是面向对象的3大特性

为啥要封装

Python 面向对象之封装、继承、多态操作实例分析

Python 面向对象之封装、继承、多态操作实例分析

好处

在使用面向过程编程时,当需要对数据处理时,需要考虑用哪个模板中哪个函数来进行操作,但是当用面向对象编程时,因为已经将数据存储到了这个独立的空间中,这个独立的空间(即对象)中通过一个特殊的变量(class)能够获取到类(模板),而且这个类中的方法是有一定数量的,与此类无关的将不会出现在本类中,因此需要对数据处理时,可以很快速的定位到需要的方法是谁 这样更方便

全局变量是只能有1份的,多很多个函数需要多个备份时,往往需要利用其它的变量来进行储存;而通过封装 会将用来存储数据的这个变量 变为了对象中的一个“全局”变量,只要对象不一样那么这个变量就可以再有1份,所以这样更方便

代码划分更清晰

面向过程

全局变量1
全局变量2
全局变量3
...
def 函数1():
  pass
def 函数2():
  pass
def 函数3():
  pass
def 函数4():
  pass
def 函数5():
  pass

面向对象

class 类(object):
  属性1
  属性2
  def 方法1(self):
    pass
  def 方法2(self):
    pass
class 类2(object):
  属性3
  def 方法3(self):
    pass
  def 方法4(self):
    pass
  def 方法5(self):
    pass

为啥要继承

Python 面向对象之封装、继承、多态操作实例分析

说明

能够提升代码的重用率,即开发一个类,可以在多个子功能中直接使用

继承能够有效的进行代码的管理,当某个类有问题只要修改这个类就行,而其继承这个类的子类往往不需要就修改

怎样理解多态

class MiniOS(object):
  """MiniOS 操作系统类 """
  def __init__(self, name):
    self.name = name
    self.apps = [] # 安装的应用程序名称列表
  def __str__(self):
    return "%s 安装的软件列表为 %s" % (self.name, str(self.apps))
  def install_app(self, app):
    # 判断是否已经安装了软件
    if app.name in self.apps:
      print("已经安装了 %s,无需再次安装" % app.name)
    else:
      app.install()
      self.apps.append(app.name)
class App(object):
  def __init__(self, name, version, desc):
    self.name = name
    self.version = version
    self.desc = desc
  def __str__(self):
    return "%s 的当前版本是 %s - %s" % (self.name, self.version, self.desc)
  def install(self):
    print("将 %s [%s] 的执行程序复制到程序目录..." % (self.name, self.version))
class PyCharm(App):
  pass
class Chrome(App):
  def install(self):
    print("正在解压缩安装程序...")
    super().install()
linux = MiniOS("Linux")
print(linux)
pycharm = PyCharm("PyCharm", "1.0", "python 开发的 IDE 环境")
chrome = Chrome("Chrome", "2.0", "谷歌浏览器")
linux.install_app(pycharm)
linux.install_app(chrome)
linux.install_app(chrome)
print(linux)

运行结果

Linux 安装的软件列表为 []
将 PyCharm [1.0] 的执行程序复制到程序目录...
正在解压缩安装程序...
将 Chrome [2.0] 的执行程序复制到程序目录...
已经安装了 Chrome,无需再次安装
Linux 安装的软件列表为 ['PyCharm', 'Chrome']

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
详解Python中的装饰器、闭包和functools的教程
Apr 02 Python
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
Jun 02 Python
浅谈python 里面的单下划线与双下划线的区别
Dec 01 Python
Python3实现带附件的定时发送邮件功能
Dec 22 Python
python画一个玫瑰和一个爱心
Aug 18 Python
关于Pycharm无法debug问题的总结
Jan 19 Python
python如何获取当前文件夹下所有文件名详解
Jan 25 Python
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
Mar 18 Python
Python 二叉树的层序建立与三种遍历实现详解
Jul 29 Python
Python中最好用的命令行参数解析工具(argparse)
Aug 23 Python
django连接oracle时setting 配置方法
Aug 29 Python
matplotlib.pyplot画图并导出保存的实例
Dec 07 Python
用python画一只可爱的皮卡丘实例
Nov 21 #Python
Python 私有化操作实例分析
Nov 21 #Python
使用python的turtle绘画滑稽脸实例
Nov 21 #Python
使用Python的Turtle绘制哆啦A梦实例
Nov 21 #Python
Python 类的魔法属性用法实例分析
Nov 21 #Python
python画蝴蝶曲线图的实例
Nov 21 #Python
Python 静态方法和类方法实例分析
Nov 21 #Python
You might like
PHP 根据IP地址控制访问的代码
2010/04/22 PHP
Codeigniter(CI)框架分页函数及相关知识
2014/11/03 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
2014/12/29 Javascript
javascript实现的网站访问量统计代码
2015/12/20 Javascript
浅谈javascript中new操作符的原理
2016/06/07 Javascript
读Javascript高性能编程重点笔记
2016/12/21 Javascript
jQuery Password Validation密码验证
2016/12/30 Javascript
Angular.JS利用ng-disabled属性和ng-model实现禁用button效果
2017/04/05 Javascript
JavaScript数据结构之双向链表和双向循环链表的实现
2017/11/28 Javascript
nodejs实现简单的gulp打包
2017/12/21 NodeJs
node简单实现一个更改头像功能的示例
2017/12/29 Javascript
vue-cli3.0 环境变量与模式配置方法
2018/11/08 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
2019/02/08 Javascript
Vue中实现权限控制的方法示例
2019/06/07 Javascript
javascript function(函数类型)使用与注意事项小结
2019/06/10 Javascript
详细分析Node.js 模块系统
2020/06/28 Javascript
解决Vue大括号字符换行踩的坑
2020/11/09 Javascript
python写的一个squid访问日志分析的小程序
2014/09/17 Python
Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法
2015/04/24 Python
Python3利用SMTP协议发送E-mail电子邮件的方法
2017/09/30 Python
rabbitmq(中间消息代理)在python中的使用详解
2017/12/14 Python
Python实现可自定义大小的截屏功能
2018/01/20 Python
django获取from表单multiple-select的value和id的方法
2019/07/19 Python
解决numpy矩阵相减出现的负值自动转正值的问题
2020/06/03 Python
Windows下pycharm安装第三方库失败(通用解决方案)
2020/09/17 Python
Argos官网:英国家喻户晓的百货零售连锁商
2017/04/03 全球购物
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
Europcar意大利:汽车租赁
2019/07/07 全球购物
自我介绍演讲稿
2014/01/15 职场文书
上班打牌检讨书
2014/02/07 职场文书
新闻编辑求职信
2014/04/09 职场文书
社会实践先进工作者事迹材料
2014/05/06 职场文书
医学生求职自荐书
2014/06/12 职场文书
幼儿园辞职书
2015/02/26 职场文书
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL