笨办法学python 习题44 继承和组合

2023-10-29

父类和子类有三种交互方式:

  1. 子类动作完全等同于父类动作
  2. 子类动作完全覆盖了父类动作
  3. 子类动作完全替换了父类动作

隐形继承

如果将函数放到基类中,那么所有的子类将会自动获得这些函数功能。需要很多类的时候,这样可以重复写很多代码。

class Parent(object):


    def implicit(self):
        print("PARENT implicit()")

class Child(Parent):
    pass


dad=Parent()
son=Child()

dad.implicit()
son.implicit()

显性覆盖

使函数调用有不同的行为

class Parent(object):

    def override(self):
        print("PARENT override()")

class Child(Parent):

    def override(self):
        print("CHILD override()")

dad=Parent()
son=Child()

dad.override()
son.override()

在运行前或运行后替换

覆盖的特例,在父类定义的内容运行之前或之后再修改行为

class Parent(object):

    def altered(self):
        print("PARENT altered()")

class Child(Parent):

    def altered(self):
        print("CHILD,BEFORE PARENT altered()")
        super(Child,self).altered()#用super来获取Parent.altered这个版本
        #child和self两个参数调用super,在此返回的基础上调用altered
        print("CHILD,AFTER PARENT altered()")

dad=Parent()
son=Child()

dad.altered()
son.altered()

在这里插入图片描述

要用super的原因

  • 首先要理解多重继承
    多重继承:定义的类继承了一个或多个类(例子如下)
class SuperFun(Child,Badstuff):
	pass
  • 利用super()解决继承关系

super()和__init__搭配使用

通常有的是唯一可以进行这种操作的地方

例子:

class Child(Parent):
	def __init__(self,stuff):
			self.stuff=stuff
			super(Child,self).__init__()

组合

class Other(object):

    def override(self):
        print("OTHER override()")

    def implicit(self):
        print("OTHER.implicit()")

    def altered(self):
        print("OTHER altered()")

class Child(object):
    def __init__(self):
        self.other = Other()

    def implicit(self):
        self.other.implicit()

    def override(self):
        print("CHILD override()")

    def altered(self):
        print("CHILD,BEFORE OTHER altered()")
        self.other.altered()
        print("CHILD,AFTER OTHER altered()")

son=Child()

son.implicit()
son.override()
son.altered()

区别于parent:只是利用other来完成它的功能

继承和组合指导原则

  1. 不惜一切代价避免多重继承,因为它太复杂以至于很不可靠。如果非要用,那得准备好钻研类层次结构,以及花时间去找各种东西的来龙去脉。
  2. 如果有一些代码会在不同场合和位置应用到,那就用组合把他们做成模块。
  3. 只有在使用的可复用部分之间有清晰的关联,可以通过一个单独的共性联系起来的时候,才使用继承,或者,现有代码或者别的不可抗拒因素所限非用继承不可,那就去用吧。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

笨办法学python 习题44 继承和组合 的相关文章

随机推荐

  • python爬虫可以用来做什么?

    1 收集数据 python爬虫程序可用于收集数据 这也是最直接和最常用的方法 由于爬虫程序是一个程序 程序运行得非常快 不会因为重复的事情而感到疲倦 因此使用爬虫程序获取大量数据变得非常简单和快速 由于99 以上的网站是基于模板开发的 使用
  • 关于微信小程序上传,在微信公众平台

    2019 05 16 小程序小白入门 最开始的时候 我不知道该如何上传自己的代码 打开微信开发平台 找到 工具 选项 再点击 上传 就好了 找到 工具 选项 点击 上传 然后在微信公众微信公众平台 小程序中 我找不到上传的代码 线上版本 审
  • oracle用户行为记录,用户行为分析-埋点实时数仓实践(附用户关联源码)

    一 概述 埋点采集 用户行为分析 实时数仓 IdMapping 此文重点讲述埋点的数据模型 数据格式 数据实时采集 加工 存储及用户关联 关于用户行为分析的概念 意义以及埋点相关的东西此文不作赘述 二 数据模型 业界比较流行的事件 用户模型
  • PhpStorm 配置在浏览器中打开PHP文件

    在phpstrom中用浏览器总是404 NOT FOUND 看了下浏览器地址不对 估摸着是配置问题 看了别人的总是不对 最后把路径全指向文件 现在就行了 添加Apache设置Type类型如图 文件夹地址则为Apache安装路径 因为我这里p
  • 数学建模--Subplot绘图的Python实现

    目录 1 Subplot函数简介 2 Subplot绘图范例1 绘制规则子图 3 Subplot绘图范例2 绘制不规则子图 4 Subplot绘图范例3 gridspec辅助实战1 5 Subplot绘图范例4 gridspec辅助实战2
  • 互联网日报

    今日看点 华为首款台式显示器登陆海外 23 8英寸售价约1361元 小米高管 今年相机部将超2000人 自研芯片会持续迭代 腾讯视频宣布VIP会员4月10日起涨价 月卡将调至30元 国产疫苗迈向全球 我国新冠疫苗首次获得欧盟GMP认证 我国
  • 实习生--该不该努力下去?又要怎么努力...

    毕业 就像一个大大的句号 从此 我们告别了一段纯真的青春 一段年少轻狂的岁月 一个充满幻想的时代 纷纷走向了社会 刚毕业的时候 作为职场新人 我们都拿着接近的薪水 干着相似的事情 大家都过得差不多 然而三到五年过去了 渐渐大家的差距就出来了
  • Siebel Task UI的功能和优点

    1 Siebel Task UI的功能 1 以逐步的方式指导用户完成工作任务 2 支持通过工作任务的向前和向后导航 3 允许用户暂停和恢复作业任务 2 Siebel Task UI的优点 1 通过多个屏幕和视图提供直接的向前和向后导航 2
  • VS恢复默认设置方法

    1 选择 工具 2 在工具菜单中选择 visual studio命令提示 3 弹出一个命令提示符窗口 在窗口中输入devenv resetsettings 回车即可
  • 生成universal link以及解决“由于应用universal link校验不通过,无法完成微信登录”

    ios app使用微信登录现在都需要填写一个universal link 本文介绍1 怎么生成universal link 2 提示错误时怎么检查 生成universal link 准备工作 需要有可以使用https访问的网址 网站需要通过
  • 调试osgEarth(十二)rex地理信息引擎的四梁八柱

    感谢 hankern 学习链接在https blog csdn net hankern article details 84091841 我感觉这里是重点了 直接截图 本来想继续调试下去 发现博主的第十三开始逐个调试的 乐得清闲了 在第十三
  • Cocos2d-x学习(二十四):vs2010使用vld检测内存泄露

    cocos2d x不仅可以做到跨平台运行 还可以做到跨平台编译调试 当然只是编译对应平台下的应用了 众所周知 cocos2d x是用c 编写的 而c 中最让人头疼的莫过于指针和内存泄露的问题 在windows下 cocos2d x支持在vs
  • 注意进行UE4的大气系统(未完成)

    有几个atmoshphere的 h和 cpp和shader 注意看下
  • MySQL大数据表增加字段、索引实现

    最近遇到的一个问题 需要在一张1800万数据量的表中添加加一个字段并添加索引 但是直接添加会导致mysql崩溃或者锁表时间太长影响用户操作 所以需要利用其他的方法进行添加 这篇文章主要给大家介绍了MySQL中大数据表增加字段 增加索引的实现
  • @kubernetes(k8s)基础理论知识

    文章目录 kubernetes基础理论 一 kunernetes发展史 二 kunernetes概述 三 kubernetes的特性 优点 四 kubnetes使用扩展 业务升级 五 kubernetes的集群架构及组件 Master节点
  • 半导体是什么?

    半导体产业是国家重点支持发展的行业 也是最关键的 卡脖子 行业之一 那到底什么是半导体呢 生活中所有的物体按照导电性大致可分为三类 导体 半导体 绝缘体 这个很好理解 物体要么导电 要么不导电 要么有一点点导电 正是这种半推半就 不清不楚的
  • Origin 中对曲线打定点,以及显示相应的坐标轴刻度

    目录 1 曲线打定点 2 显示相应的坐标轴刻度 3 选择数据绘制也可 1 曲线打定点 原图 及 数据 数据从1开始到100 我们对 x 25 处打点 通过数据读取器 找到需到打点的位置 将图中 箭头处选中 然后按住 Ctrl 鼠标左键 双击
  • 机器学习第六课--朴素贝叶斯

    朴素贝叶斯广泛地应用在文本分类任务中 其中最为经典的场景为垃圾文本分类 如垃圾邮件分类 给定一个邮件 把它自动分类为垃圾或者正常邮件 这个任务本身是属于文本分析任务 因为对应的数据均为文本类型 所以对于此类任务我们首先需要把文本转换成向量的
  • tomcat配置多个域名的问题

  • 笨办法学python 习题44 继承和组合

    父类和子类有三种交互方式 子类动作完全等同于父类动作 子类动作完全覆盖了父类动作 子类动作完全替换了父类动作 隐形继承 如果将函数放到基类中 那么所有的子类将会自动获得这些函数功能 需要很多类的时候 这样可以重复写很多代码 class Pa