一、入门使用

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

class Information(object):
def __init__(self,name,age):
self.name = name
self.age = age class Job_Information(Information):
def __init__(self,name,age,job_time):
# Information.__init__(self,name,age)
super(Job_Information,self).__init__(name,age)
self.job_time = job_time

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

class Information(object):
def __init__(self,name,age):
self.name = name
self.age = age def print_Flag(self):
print("我是老大") class Job_Information(Information):
def __init__(self,name,age,job_time):
# Information.__init__(self,name,age)
super(Job_Information,self).__init__(name,age)
self.job_time = job_time def print_Flag(self):
super(Job_Information,self).print_Flag() #super以自己作为参数,调用父类的方法
print("我是老二") kebi = Job_Information("科比",25,3)
kebi.print_Flag()

打印结果:

我是老大
我是老二

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

二、深入super()

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


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

打印的结果:

A
B
C
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. C++语言基础(10)-虚继承

    一.产生背景 先看下列一份代码: //间接基类A class A{ protected: int m_a; }; //直接基类B class B: public A{ protected: int m ...

  2. Windows Server 2008 R2入门之用户管理

    一.用户账户概述: ”用户”是计算机的使用者在计算机系统中的身份映射,不同的用户身份拥有不同的权限,每个用户包含一个名称和一个密码: 在Windows中,每个用户帐户有一个唯一的安全标识符(Secur ...

  3. Vuex 2 入门与提高。

    从计数器开始 让我们从一个简单的计数器,开始进入Vuex 的世界: 计数器应用的数据模型很简单:使用一个counter属性来表示计数器的 当前值就够了. 在Vue实例的created钩子 中,应用启动 ...

  4. vCenter初始化数据中心和集群

    接着上一次的文档"7.vCeenter部署流程2",vcenter软件已经安装在2008上了,同时win2008上的和vmware相关的服务都已经启动,这里一定要检查以下: 打开服 ...

  5. php 循环简写

    <?php class a{ public function news($news){ $articles = array(); foreach ($news as $key => $va ...

  6. 更改centos 7 的默认启动为命令界面

    vi /etc/inittab 可以看到这样两行: # To set a default target, run:# systemctl set-default TARGET.target 故: su ...

  7. LINQ 标准查询操作符

    本文介绍了LINQ标准查询操作符.没有这些操作符,LINQ就不会存在.本文为理解这些操作符的功能提供了很好的基础.了解它们将会很有帮助,因为LINQ的各种Provider都是基于这些操作符来完成各自丰 ...

  8. Unity3D学习笔记——NGUI之UIButton

    前言:用于接受点击,悬停,触摸等事件.UIButton还有重要的用途,就是改变控件不同状态下的颜色. 一:使用方式: 1.在UI Root中右键创建一个Sprite 2.为其添加一个碰撞组件,就添加B ...

  9. mysql增加自定义函数功能

    mysql默认是不能自定义函数的 当create function时 This function has none of DETERMINISTIC, NO SQL, or READS SQL DAT ...

  10. redis 底层数据结构 整数集合intset

    整数集合是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时Redis就会使用整数集合作为集合键的底层实现 整数集合是Redis用于保存整数值的集合抽象数据结构,它可以保存 ...