面向对象编程——super进阶(十)
一、入门使用
在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进阶(十)的更多相关文章
- Python - 面向对象编程 - super()
前置知识 继承的详解:https://www.cnblogs.com/poloyy/p/15216652.html 子类方法的重写:https://www.cnblogs.com/poloyy/p/1 ...
- PythonI/O进阶学习笔记_3.2面向对象编程_python的继承(多继承/super/MRO/抽象基类/mixin模式)
前言: 本篇相关内容分为3篇多态.继承.封装,这篇为第二篇 继承. 本篇内容围绕 python基础教程这段: 在面向对象编程中,术语对象大致意味着一系列数据(属性)以及一套访问和操作这些数据的方法.使 ...
- Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理)
Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理) 一丶封装 , 多态 封装: 将一些东西封装到一个地方,你还可以取出来( ...
- 面向对象编程(十)——继承之Super关键字及内存分析
Super关键字
- python面向对象编程进阶
python面向对象编程进阶 一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 ...
- Scala进阶之路-面向对象编程之类的成员详解
Scala进阶之路-面向对象编程之类的成员详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Scala中的object对象及apply方法 1>.scala 单例对象 ...
- Day7 - Python基础7 面向对象编程进阶
Python之路,Day7 - 面向对象编程进阶 本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个 ...
- Python进阶 函数式编程和面向对象编程等
函数式编程 函数:function 函数式:functional,一种编程范式.函数式编程是一种抽象计算机的编程模式. 函数!= 函数式(如计算!=计算机) 如下是不同语言的抽象 层次不同 高阶函数: ...
- Python进阶之面向对象编程
面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机 ...
随机推荐
- kafka consumer assign 和 subscribe模式差异分析
转载请注明原创地址:http://www.cnblogs.com/dongxiao-yang/p/7200971.html 最近需要研究flink-connector-kafka的消费行为,发现fli ...
- ASP.NET MVC 表单提交多层子级实体集合数据到控制器中
于遇到了项目中实体类嵌套多层子级实体集合,并且子级实体集合的数据需要提交保存到数据库中的问题.针对此情况需要进行一些特殊的处理才可以将整个 实体类及子级实体集合数据提交表单到控制器中,解决的方法是根据 ...
- XCode 4.6下XIB文件提示“...could not be opened..."的问题
最近更新了Mac系统和XCode,当我把一个以前的项目用Xcode5打开以后,再用Xcode4.6打开时,选中XXXX.xib/storyboard文件,有的文件会弹出 "The docum ...
- js模板引擎artTemplate快速上手
腾讯的artTemplate 1,编写模板 (采用script标签并带有属性id和type="text/html") <script id="test" ...
- 结构体成员管理AVClass AVOption之2AVOption,设置选项值
AVOption用于在FFmpeg中描述结构体中的成员变量.一个AVOption可以包含名称,简短的帮助信息,取值等. 上篇文章中概括了AVClass,AVOption和目标结构体之间的关系.以AVF ...
- java 调用cmd命令
public class Port{ public static void main(String[] args) { Runtime runtime=Runtime.getRuntime(); tr ...
- RL for Robots
1.Robot gains Social Intelligence through Multimodal Deep Reinforcement Learning 这篇文章使用DQN去训练一个机器人,使 ...
- C++标准库之condition_variable
conditon_variable(条件变量)用于线程间同步 condition_variable有5个函数,函数名及对应的功能如下: wait阻塞自己,等待唤醒 wait_for阻塞自己,等待唤醒, ...
- head&&tail
//參考<Linux shell脚本攻略 第2版> 1,head a)打印前10行: ubuntu@VM-62-13-ubuntu:~$ head file b)打印前5行: ubuntu ...
- C# 6新特性简单总结
最近在看<C#高级编程 C# 6&.NET Core 1.0>,会做一些读书笔记,也算对知识的总结与沉淀了. 1.静态的using声明 静态的using声明允许调用静态方法时不使用 ...