作者:关注了
Github:Github
掘金:进去看看
爱好:Americano More Ice !
QQ学习交流群(new): 811792998
先举个例子
class Base(object):
def __init__(self):
print "Base created"
class ChildA(Base):
def __init__(self):
Base.__init__(self)
class ChildB(Base):
def __init__(self):
super(ChildB, self).__init__()
class ChildC(Base):
def __init__(self):
super().__init__()
ChildA()
ChildB()
看完你可能有两个疑问
super()
Base.__init__
、super().__init__
和super(__class__, self)
三者有什么区别让我们带着问题来寻找答案!Let’s get it !
多数我们使用super的原因是为了协作多重继承的子类将在方法解析顺序 (MRO) 中调用正确的下一个父类函数,简单来说,获取父类拥有的属性(毕竟父生子,子super一下就拥有能力)
super().__init__
和super(__class__, self)
可以理解效果为一样的,只是python
版本写法不同罢了。但是,重要了,但是,super(__class__, self)
这种python2
的写法尽量避免,因为它是多余的、较慢的(使用名称查找)和更冗余的,推荐使用super().__init__
写法。
# python3.0+使用
super().__init__
# python2.0+使用
super(__class__, self)
第三种写法,没有super
会导致多种继承的能力受到限制,即获取父级能力属性受影响
Base.__init__