Python面试题:如何正确使用Super方法实现多继承?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1886个文字,预计阅读时间需要8分钟。
我们最常见的,可以说是几乎唯一能见到的使用super的格式是:
pythonclass SubClass(BaseClass): def method(self): super(SubClass, self).method()
我们最常见的,可以说几乎唯一能见到的使用super的形式是:
class SubClass(BaseClass):def method(self):
super(SubClass, self).method()
#do some thing here...
其中,最常见的method()是__init__()
以前做过Java,刚刚接触Python的继承,的确感觉有点奇怪,有时候还能搞混。。。当然这还是因为Java是单继承,只能用接口实现类似多继承的方式,而Python就直接支持多继承。
当我第一次见到这个super()的时候,我想说,这是啥啊?为什么Python的super看起来这么奇怪呢?
super直接指向父类的实例不就得了么?为什么非得搞两个参数?
而且第一个参数还是自己的类名,而不是父类的类名!
既然是自己的类名你还费劲写一遍干嘛,干脆省略不得了?
第二个参数为啥是self?既然是self你省略不得了?
还有,super()返回的是个啥玩意啊,为什么可以.method() ? 难道他返回了一个BaseClass的instance么?
今天就来解答这一连串的问题。
本文共计1886个文字,预计阅读时间需要8分钟。
我们最常见的,可以说是几乎唯一能见到的使用super的格式是:
pythonclass SubClass(BaseClass): def method(self): super(SubClass, self).method()
我们最常见的,可以说几乎唯一能见到的使用super的形式是:
class SubClass(BaseClass):def method(self):
super(SubClass, self).method()
#do some thing here...
其中,最常见的method()是__init__()
以前做过Java,刚刚接触Python的继承,的确感觉有点奇怪,有时候还能搞混。。。当然这还是因为Java是单继承,只能用接口实现类似多继承的方式,而Python就直接支持多继承。
当我第一次见到这个super()的时候,我想说,这是啥啊?为什么Python的super看起来这么奇怪呢?
super直接指向父类的实例不就得了么?为什么非得搞两个参数?
而且第一个参数还是自己的类名,而不是父类的类名!
既然是自己的类名你还费劲写一遍干嘛,干脆省略不得了?
第二个参数为啥是self?既然是self你省略不得了?
还有,super()返回的是个啥玩意啊,为什么可以.method() ? 难道他返回了一个BaseClass的instance么?
今天就来解答这一连串的问题。

