一、入门使用

在python中,使用super最常见的让子类继承父类。在这种情况下,当前类和对象可以作为super函数的参数使用,调用函数返回的任何方法都是调用超类的方法,而不是当前类的方法。

  1. class Information(object):
  2. def __init__(self,name,age):
  3. self.name = name
  4. self.age = age
  5.  
  6. class Job_Information(Information):
  7. def __init__(self,name,age,job_time):
  8. # Information.__init__(self,name,age)
  9. super(Job_Information,self).__init__(name,age)
  10. self.job_time = job_time

在类的继承中,如果重新定义某个方法,该方法会覆盖父类的同名方法,但有时,我们希望能同时实现父类的功能,这时,我们就需要调用父类的方法了,可以使用super来实现:

  1. class Information(object):
  2. def __init__(self,name,age):
  3. self.name = name
  4. self.age = age
  5.  
  6. def print_Flag(self):
  7. print("我是老大")
  8.  
  9. class Job_Information(Information):
  10. def __init__(self,name,age,job_time):
  11. # Information.__init__(self,name,age)
  12. super(Job_Information,self).__init__(name,age)
  13. self.job_time = job_time
  14.  
  15. def print_Flag(self):
  16. super(Job_Information,self).print_Flag() #super以自己作为参数,调用父类的方法
  17. print("我是老二")
  18.  
  19. kebi = Job_Information("科比",25,3)
  20. kebi.print_Flag()

打印结果:

  1. 我是老大
  2. 我是老二

在上面,我们重新定义了print_Flag方法,一般情况下会打印自己定义的,为了能够实现父类的功能,我们又使用super调用了父类的方法。

二、深入super()

来看一个稍微复杂一点的例子:

  1.  
  1. class D(object):
    def __init__(self):
    print("D")
  2.  
  3. class C(D):
    def __init__(self):
    print("C")
    super(C,self).__init__()
  4.  
  5. class B(D):
    def __init__(self):
    print("B")
    super(B,self).__init__()
  6.  
  7. class A(B,C):
    def __init__(self):
    print("A")
    super(A, self).__init__()
    # print("B") #将其替换掉,就是这样的
    # print("C") #
    # print("D")
  1.  

打印的结果:

  1. A
  2. B
  3. C
  4. D

在多继承中,super不只是寻找当前的父类,而是依据mro顺序,根据广度优先查找下一个类。

面向对象编程——super进阶(十)的更多相关文章

  1. Python - 面向对象编程 - super()

    前置知识 继承的详解:https://www.cnblogs.com/poloyy/p/15216652.html 子类方法的重写:https://www.cnblogs.com/poloyy/p/1 ...

  2. PythonI/O进阶学习笔记_3.2面向对象编程_python的继承(多继承/super/MRO/抽象基类/mixin模式)

    前言: 本篇相关内容分为3篇多态.继承.封装,这篇为第二篇 继承. 本篇内容围绕 python基础教程这段: 在面向对象编程中,术语对象大致意味着一系列数据(属性)以及一套访问和操作这些数据的方法.使 ...

  3. Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理)

    Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理) 一丶封装 , 多态 封装:            将一些东西封装到一个地方,你还可以取出来( ...

  4. 面向对象编程(十)——继承之Super关键字及内存分析

    Super关键字

  5. python面向对象编程进阶

    python面向对象编程进阶 一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 ...

  6. Scala进阶之路-面向对象编程之类的成员详解

    Scala进阶之路-面向对象编程之类的成员详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Scala中的object对象及apply方法 1>.scala 单例对象 ...

  7. Day7 - Python基础7 面向对象编程进阶

    Python之路,Day7 - 面向对象编程进阶   本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个 ...

  8. Python进阶 函数式编程和面向对象编程等

    函数式编程 函数:function 函数式:functional,一种编程范式.函数式编程是一种抽象计算机的编程模式. 函数!= 函数式(如计算!=计算机) 如下是不同语言的抽象 层次不同 高阶函数: ...

  9. Python进阶之面向对象编程

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

随机推荐

  1. kafka consumer assign 和 subscribe模式差异分析

    转载请注明原创地址:http://www.cnblogs.com/dongxiao-yang/p/7200971.html 最近需要研究flink-connector-kafka的消费行为,发现fli ...

  2. ASP.NET MVC 表单提交多层子级实体集合数据到控制器中

    于遇到了项目中实体类嵌套多层子级实体集合,并且子级实体集合的数据需要提交保存到数据库中的问题.针对此情况需要进行一些特殊的处理才可以将整个 实体类及子级实体集合数据提交表单到控制器中,解决的方法是根据 ...

  3. XCode 4.6下XIB文件提示“...could not be opened..."的问题

    最近更新了Mac系统和XCode,当我把一个以前的项目用Xcode5打开以后,再用Xcode4.6打开时,选中XXXX.xib/storyboard文件,有的文件会弹出 "The docum ...

  4. js模板引擎artTemplate快速上手

    腾讯的artTemplate 1,编写模板 (采用script标签并带有属性id和type="text/html") <script id="test" ...

  5. 结构体成员管理AVClass AVOption之2AVOption,设置选项值

    AVOption用于在FFmpeg中描述结构体中的成员变量.一个AVOption可以包含名称,简短的帮助信息,取值等. 上篇文章中概括了AVClass,AVOption和目标结构体之间的关系.以AVF ...

  6. java 调用cmd命令

    public class Port{ public static void main(String[] args) { Runtime runtime=Runtime.getRuntime(); tr ...

  7. RL for Robots

    1.Robot gains Social Intelligence through Multimodal Deep Reinforcement Learning 这篇文章使用DQN去训练一个机器人,使 ...

  8. C++标准库之condition_variable

    conditon_variable(条件变量)用于线程间同步 condition_variable有5个函数,函数名及对应的功能如下: wait阻塞自己,等待唤醒 wait_for阻塞自己,等待唤醒, ...

  9. head&amp;&amp;tail

    //參考<Linux shell脚本攻略 第2版> 1,head a)打印前10行: ubuntu@VM-62-13-ubuntu:~$ head file b)打印前5行: ubuntu ...

  10. C# 6新特性简单总结

    最近在看<C#高级编程 C# 6&.NET Core 1.0>,会做一些读书笔记,也算对知识的总结与沉淀了. 1.静态的using声明 静态的using声明允许调用静态方法时不使用 ...