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

posted on 2017-06-26 18:40  迪米特  阅读(452)  评论(0编辑  收藏  举报

导航