Python中super函数的用法


Posted in Python onNovember 17, 2017

描述

super() 函数用于调用下一个父类(超类)并返回该父类实例的方法。

super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。

MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表。

语法

以下是 super() 方法的语法:

super(type[, object-or-type])

参数

type -- 类。
object-or-type -- 类,一般是 self

返回值

无。

实例

以下展示了使用 super 函数的实例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
class FooParent(object):
  def __init__(self):
    self.parent = 'I\'m the parent.'
    print ('Parent')
  
  def bar(self,message):
    print ("%s from Parent" % message)
 
class FooChild(FooParent):
  def __init__(self):
    # super(FooChild,self) 首先找到 FooChild 的父类(就是类 FooParent),然后把类B的对象 FooChild 转换为类 FooParent 的对象
    super(FooChild,self).__init__()  
    print ('Child')
    
  def bar(self,message):
    super(FooChild, self).bar(message)
    print ('Child bar fuction')
    print (self.parent)
 
if __name__ == '__main__':
  fooChild = FooChild()
  fooChild.bar('HelloWorld')

执行结果:

Parent
Child
HelloWorld from Parent
Child bar fuction
I'm the parent.

python的类分别有新式类和经典类,都支持多继承。在类的继承中,如果你想要重写父类的方法而不是覆盖的父类方法,这个时候我们可以使用super()方法来实现

class C:
  def minus(self,x):
    return x/2

class D(C):
  def minus(self,x):
    super(D, self).minus()
    print 'hello'

上面的代码中C是父类,D是子类,我们在D类重新定义了minus方法,就是在C类的功能基础基础上新添print 'hello'功能。super在这里的作用就是在子类中调用父类的方法,这个也是在单继承常见调用super()的用法。那么问题来了

class A:
  def __init__(self):
    self.n = 10

  def minus(self, m):
    self.n -= m


class B(A):
  def __init__(self):
    self.n = 7

  def minus(self, m):
    super(B,self).minus(m)
    self.n -= 3
B()
B(2)
print b.n

那么上面的代码中b.n的输出是什么呢?为什么结果是2呢,而不是2呢?super(B,self).minus(m)明明是调用了父类的minus方法,可是输出结果就是5,是你要明白现在B的实例,而不是A的实例,那么传递的self.n的数值是7,而不是10.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python操作sqlite3快速、安全插入数据(防注入)的实例
Apr 26 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
Nov 23 Python
python快速建立超简单的web服务器的实现方法
Feb 17 Python
查看python安装路径及pip安装的包列表及路径
Apr 03 Python
Python2.7实现多进程下开发多线程示例
May 31 Python
sklearn和keras的数据切分与交叉验证的实例详解
Jun 19 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
Oct 31 Python
Python基于execjs运行js过程解析
Nov 27 Python
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
Apr 27 Python
python3+PyQt5+Qt Designer实现界面可视化
Jun 10 Python
python实现简单聊天功能
Jul 07 Python
如何利用Python实现n*n螺旋矩阵
Jan 18 Python
python使用正则表达式替换匹配成功的组
Nov 17 #Python
python定时利用QQ邮件发送天气预报的实例
Nov 17 #Python
详解python eval函数的妙用
Nov 16 #Python
Python算法之图的遍历
Nov 16 #Python
Python之Scrapy爬虫框架安装及使用详解
Nov 16 #Python
python字典操作实例详解
Nov 16 #Python
python实现报表自动化详解
Nov 16 #Python
You might like
用文本文件制作留言板提示(上)
2006/10/09 PHP
用PHP程序实现支持页面后退的两种方法
2008/06/30 PHP
PHP原生模板引擎 最简单的模板引擎
2012/04/25 PHP
php学习之function的用法
2012/07/14 PHP
php多用户读写文件冲突的解决办法
2013/11/06 PHP
PHP编程中的Session阻塞问题与解决方法分析
2017/08/07 PHP
怎么用javascript进行拖拽
2006/07/20 Javascript
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
2010/01/05 Javascript
Lab.js初次使用笔记
2015/02/28 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
2017/08/23 Javascript
微信小程序实现tab页面切换功能
2018/07/13 Javascript
NodeJS加密解密及node-rsa加密解密用法详解
2018/10/12 NodeJs
JavaScript键盘事件常见用法实例分析
2019/01/03 Javascript
JavaScript判断数组类型的方法
2019/10/23 Javascript
vue利用全局导航守卫作登录后跳转到未登录前指定页面的实例代码
2020/05/19 Javascript
关于IDEA中的.VUE文件报错 Export declarations are not supported by current JavaScript version
2020/10/17 Javascript
Python中实现两个字典(dict)合并的方法
2014/09/23 Python
Python的装饰器模式与面向切面编程详解
2015/06/21 Python
Python+Wordpress制作小说站
2017/04/14 Python
python三方库之requests的快速上手
2019/03/04 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
python 实现返回一个列表中出现次数最多的元素方法
2019/06/11 Python
Python 实现数据结构-循环队列的操作方法
2019/07/17 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
2019/07/22 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
使用python编写一个语音朗读闹钟功能的示例代码
2020/07/14 Python
html5中地理位置定位api接口开发应用小结
2013/01/04 HTML / CSS
html5中canvas学习笔记1-画板的尺寸与实际显示尺寸
2013/01/06 HTML / CSS
Python面试题集
2012/03/08 面试题
8和9的加减法教学反思
2014/05/01 职场文书
学校校庆演讲稿
2014/05/22 职场文书
三好学生事迹材料
2014/12/24 职场文书
英文感谢信格式
2015/01/21 职场文书
分享五个Node.js开发的优秀实践 
2022/04/07 NodeJs
vue判断按钮是否可以点击
2022/04/09 Vue.js