川石教育
全国咨询热线:136-9172-9932
  1. 首页 > 资讯与干货 > IT资讯

Python | 面向对象编程进阶OOP特征:继承与多态

作者:川石学院 日期:2022-04-11 11:10:10 点击数:

一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就接着来谈谈关于软件测试中的“面向对象编程进阶OOP特征:继承与多态”。

自动化测试:Python常见的几种编程模式(图1)

  继承的实现 / 深度优先和广度优先 / 经典类和新式类

  一、继承 extends

  继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的内容。

  ● 猫可以:喵喵叫、吃、喝、拉、撒

  ● 狗可以:汪汪叫、吃、喝、拉、撒

  例如:

  我们发现无论是猫还是狗,都有共同的行为,同时也有自己个性的行为叫。

  (一)继承的语法

  父类-子类的纵向编程模式。

Python | 面向对象编程进阶OOP特征:继承与多态(图2)

  ● 注意,在继承关系下,子类将会拥有父类全部的方法(即,父类方法可在子类对象中访问调用)

  示例:

  ch10-demo07 -extends.py

  UML,类图设计,Cat类和Dog类继承于Animal动物类。

Python | 面向对象编程进阶OOP特征:继承与多态(图3)

  说明:

  通过类图我们可以看出:

  ● Animal类有eat(吃)、drink(喝)、 shit(拉)、pee(撒)四个公共方法。

  ● Cat和Dog类在继承了父类Animal的同时, 又有各自自己的Call方法。

  因此,我们可以得出一个结论:一般共有的方法可以抽象出来放在父类中,子类在继承父类的同时凸显出自己个性的方法。

  示例:

  ch10-demo07-extends.py

  创建Animal父类,与其子类:Cat

Python | 面向对象编程进阶OOP特征:继承与多态(图4)

  此处省略 Dog 类代码(与Cat类类似)……

  (二)多重继承

  Q: 那么问题又来了,多继承呢?

  ① 是否可以继承多个类?

  ② 如果继承的多个类每个类中都定了相同的函数,那么那一个会被使用呢?

  答:

  ① Python的类可以继承多个类,不像很多高级编程语言Java和C#那样只能继承一个类(单根语系)。

  ② 类如果继承了多个类,那么其对象调用寻找方法的方式是: 广度优先

  示例5:

  ch10-demo08-extends-methods.py

  class A():

  def f(self):

  print('A')

  class B():

  def f(self):

  print('B')

  class C(A,B):

  pass

  s = C()

  s.f() # A

  ......

  class C(A,B):

  pass

  class D(A,B):

  def f(self):

  print("D")

  class E(C,D):

  pass

  s = E()

  s.f() # D

  (三)继承下的super()概述

  ● 在Python面向对象的继承特征下,若子类中需调用父类的方法,则需要使用super()来实现。

  示例:

  ch9-demo07-example-inherit.py

Python | 面向对象编程进阶OOP特征:继承与多态(图5)
Python | 面向对象编程进阶OOP特征:继承与多态(图6)

  (四)当super遇到_init_

  我们以一个房屋作为示例。

  示例:

  ch9-demo08-example-inherit.py

Python | 面向对象编程进阶OOP特征:继承与多态(图7)
Python | 面向对象编程进阶OOP特征:继承与多态(图8)

  二、多态

  Python不支持多态并且也用不到多态,多态的概念是应用于Java和C#这一类强类型语言中,而Python崇尚“鸭子类型”。

  Q:什么是“鸭子类型”?

  鸭子类型(英语:duck typing)是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定。这个概念的名字来源于由James Whitcomb Riley提出的鸭子测试,“鸭子测试”可以这样表述:

  示例:

Python | 面向对象编程进阶OOP特征:继承与多态(图9)

  为了让Func函数既可以执行S1对象的show方法,又可以执行S2对象的show方法,所以,定义了一个S1和S2类的父类

  而实际传入的参数是:S1对象和S2对象


相关文章
  • 亚马逊运营成功转行软件测试,薪资13K表示很满意!2022-04-11 11:10:10
  • 西安川石的兰朋友喊你来当他的学弟学妹啦!2022-04-11 11:10:10
  • 国外的月亮也不一定比国内测试猿的年薪美~2022-04-11 11:10:10
  • 建筑工程专业朱同学成功转行为软件测试人!2022-04-11 11:10:10
  • 财务管理专业转行软件测试月薪甩会计几条街!2022-04-11 11:10:10
  • 只有技术沉淀才能成功上岸,深圳就业薪资13K!2022-04-11 11:10:10
  • 薪资11K!实现自我价值,从掌握一门IT技术开始...2022-04-11 11:10:10
  • 文科生转行软件测试照样拿下高薪15K!2022-04-11 11:10:10
  • 恭喜罗同学喜提19.5K,成功入行软件测试!2022-04-11 11:10:10
  • 毕业1年,迷茫的他最终选择转行软件测试2022-04-11 11:10:10