您的位置:首页 > 编程语言 > Python开发

Python每日小结(九)

2017-11-09 14:48 176 查看
        今天我们来学习一个比较有用的方法(类),叫做super。为什么要学习这个方法?这个方法有什么用?

        比如说,我们在写一个类,现在要调用其父类的某个方法,在Python2.2之前,通常是这样写的:

class A:
def __init__(self):
print "A"
print "~A"

class B(A):
def __init__(self):
print "B"
A.__init__(self)
print "~B"

b=B()


        运行结果:

       


        上面这种做法是,通过类名A来引用其方法__init__(),然后传入对象self,从而调用父类A。这样做的缺点很明显,比如说,我们在子类B中多次调用了父类A的方法,则当我们想要更改父类,即想要使B继承C,则需要去读整个代码,将所有的类似调用全都更改过来。所以从Python2.2开始,Python添加了一个关键字super,专门用于解决这个问题:

        super(type[, object-or-type])
        该方法将返回type的超类,值得注意的是,super()仅仅对新式类可用,也即继承object的类。举例来看一下:

class A(object):
def __init__(self):
print "A"
print "~A"

class B(A):
def __init__(self):
print "B"
super(B,self).__init__()
print "~B"

b=B()
        与上面不同的是,这里的A是继承于object的,也就是说A是新式类。在使用super之后,如果我们想要修改B的父为C,则只需要更改为:

class A(object):
def __init__(self):
print "A"
print "~A"

class B(C):
def __init__(self):
print "B"
super(B,self).__init__()
print "~B"

b=B()
        也即,将class B(A)更改为class B(C)即可。总的来说,我们可以这样使用super:

class B(C):
def func(self,arg)
super(B,self).func(arg)
        哦,对了,准确地说,super并不是一个函数,而是一个类名,super(B,self)实际上调用了super类的初始化函数,产生了一个super对象,而这个初始化函数并没有做什么神奇的事情,仅仅只是简单地记录了类类型和具体实例,关于多重继承这里就不赘述了,有兴趣可以参考Python
super()。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: