python super()使用详解
1.super的作用
调用父类方法
2.单继承使用示例
#coding:utf-8
#单继承
class A(object):
def __init__(self):
self.n=2
def add(self,m):
self.n+=m
class B(A):
def __init__(self):
self.n=3
def add(self,m):
super(B,self).add(m)
self.n+=3
b=B()
b.add(3)
print b.n
运行结果:
super(B,self)参数说明:
1)B:调用的是B的父类的方法。
2)self:子类的实例
3.多继承使用示例
#多继承
class A(object):
def __init__(self):
self.n=2
def add(self,m):
print "A"
self.n+=m
class B(A):
def __init__(self):
self.n=3
def add(self,m):
print "B"
super(B,self).add(m)
self.n+=3
class C(A):
def __init__(self):
self.n=4
def add(self,m):
print "C"
super(C,self).add(m)
self.n+=4
class D(B,C):
def __init__(self):
self.n=5
def add(self,m):
print "D"
super(D,self).add(m)
self.n+=5
print D.__mro__
d=D()
d.add(3)
print d.n
运行结果:
python中__mro__属性,表示类的线性解析顺序, 新式类使用广度优先搜索,来确定父类调用顺序。
如上例中,D类__mro__的值为[D,B,C,A,object],因此,super(D,self).add(m)会先调用B的add方法,
super(B,self).add(m)会先调用C的add方法,super(C,self).add(m)会先调用A的add方法,结果为20
python super()使用详解的更多相关文章
- Python super继承详解
MRO(Method resolution order)是python用来解析方法调用顺序的,mro中记录了一个类的所有基类的类类型序列,super不是简单地调用基类的方法,而是按照MRO中的顺序来调 ...
- python super()函数详解
引言: 在类的多继承使用场景中,重写父类的方法时,可能会考虑到需要重新调用父类的方法,所以super()函数就是比较使用也很必要的解决方法: 文章来源: http://www.cnblogs.com/ ...
- 【python进阶】详解元类及其应用2
前言 在上一篇文章[python进阶]详解元类及其应用1中,我们提到了关于元类的一些前置知识,介绍了类对象,动态创建类,使用type创建类,这一节我们将继续接着上文来讲~~~ 5.使⽤type创建带有 ...
- Python基础知识详解 从入门到精通(七)类与对象
本篇主要是介绍python,内容可先看目录其他基础知识详解,欢迎查看本人的其他文章Python基础知识详解 从入门到精通(一)介绍Python基础知识详解 从入门到精通(二)基础Python基础知识详 ...
- Python 字符串方法详解
Python 字符串方法详解 本文最初发表于赖勇浩(恋花蝶)的博客(http://blog.csdn.net/lanphaday),如蒙转载,敬请保留全文完整,切勿去除本声明和作者信息. ...
- python time模块详解
python time模块详解 转自:http://blog.csdn.net/kiki113/article/details/4033017 python 的内嵌time模板翻译及说明 一.简介 ...
- Python中dict详解
from:http://www.cnblogs.com/yangyongzhi/archive/2012/09/17/2688326.html Python中dict详解 python3.0以上,pr ...
- Python开发技术详解(视频+源码+文档)
Python, 是一种面向对象.直译式计算机程序设计语言.Python语法简捷而清晰,具有丰富和强大的类库.它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结 ...
- python/ORM操作详解
一.python/ORM操作详解 ===================增==================== models.UserInfo.objects.create(title='alex ...
随机推荐
- Idea Spring-boot gradle lombok
1:build.gradle compile("org.projectlombok:lombok:1.16.16") 2:idea安装lombok插件 3:设置 4:重启
- Discuz的sc 和tc版本有什么区别
Discuz的sc 和tc版本有什么区别 简单的来说: sc 是tc 是繁体中文 简体中文Simplified Chinese 繁体中文traditional Chinese
- java面试第十四天
包名.类名和属性可以被序列化,方法和构造器不会被序列化的. 静态属性不会被序列化的. 属性会被递归序列化的,也就是一个类中有引用类型的属性,如果这个属性对应的类实现了Serializable接口,在对 ...
- 通过Js对电话和姓名身份证等进行部分隐藏处理
在进行web前端页面开发中,有时需要从后台获取用户数据来显示在前台页面,但是考虑到用户信息安全的问题,就需要对这些信息进行处理,使其不完全显示出来,例如姓名,两个字的显示姓,名字用*代替,电话前三位和 ...
- poj 2195 Going Home(最小费最大流)
poj 2195 Going Home Description On a grid map there are n little men and n houses. In each unit time ...
- Android中onTouch与onClick事件的关系
这几天遇到点关于Android的触摸事件相关的,还跟onClick有关.暂且记下: LinearLayout分别设置了onTouchListener,onClickListener,onLongCli ...
- 用openssl生成SSL使用的私钥和证书,并自己做CA签名(转)
本 文记叙的是一次基于SSL的socket通讯程序开发中,有关证书,签名,身份验证相关的步骤. 我们的场景下,socket服务端是java语言编写的,客户端是c语言.使用了一个叫做matrixssl的 ...
- 在Ubuntu16.04 64bit上安装sublime text 3
安装sublime text 3 根据官网上提供的安装说明 https://www.sublimetext.com/docs/3/linux_repositories.html 进行安装, 首先是 ...
- 【laravel5.4】{{$name}}、{{name}}、@{{$name}} 和 @{{name}} 的区别
1.前面带@符号的,表示不需要laravel的blade引擎进行解析:有@的,则需要blade解析 2.{{$name}} 表示:blade解析 后台php的 name变量 {{name}} 表示:b ...
- jQuery写缓存之:sessionStorage的运用,配合PHP将不同tab页的数据写入后台
JS(jQuery)写缓存之:sessionStorage的运用: 结果就是讲存储的DOM对象value传到后台PHP,进行foreach(){} 解析JSON成二维数组 示例页面:http://ww ...