Python每日小结(九)
2017-11-09 14:48
176 查看
今天我们来学习一个比较有用的方法(类),叫做super。为什么要学习这个方法?这个方法有什么用?
比如说,我们在写一个类,现在要调用其父类的某个方法,在Python2.2之前,通常是这样写的:
运行结果:
上面这种做法是,通过类名A来引用其方法__init__(),然后传入对象self,从而调用父类A。这样做的缺点很明显,比如说,我们在子类B中多次调用了父类A的方法,则当我们想要更改父类,即想要使B继承C,则需要去读整个代码,将所有的类似调用全都更改过来。所以从Python2.2开始,Python添加了一个关键字super,专门用于解决这个问题:
super(type[, object-or-type])
该方法将返回type的超类,值得注意的是,super()仅仅对新式类可用,也即继承object的类。举例来看一下:
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()。
相关文章推荐
- Python每日小结(七)
- Python每日小结(三)
- Python每日小结(十三)
- Python每日小结(十)
- Python每日小结(十一)
- Python每日小结(一)
- Python每日小结(四)
- Python每日小结(二)
- python-快速使用urllib爬取网页(小结)
- 重读python之问题小结
- [python每日一练]--0001:生成激活码
- Python 错误和异常小结
- iOS每日小结-01
- Python简单实现产生随机位数的密码及注意事项小结
- Python 小结
- [Python入门及进阶笔记]Python-基础-数字小结
- Python实现Android自动化每日构建框架
- Python常见格式化字符串方法小结【百分号与format方法】
- Python进阶学习小结-1.md
- python_day4装饰器小结