懂王系列之super().__init__,问你懂了没

作者关注了

GithubGithub

掘金进去看看

爱好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 !

1.为什么使用super,什么场景去使用super?

多数我们使用super的原因是为了协作多重继承的子类将在方法解析顺序 (MRO) 中调用正确的下一个父类函数,简单来说,获取父类拥有的属性(毕竟父生子,子super一下就拥有能力)

2.这三者有什么区别呢

super().__init__super(__class__, self)可以理解效果为一样的,只是python版本写法不同罢了。但是,重要了,但是,super(__class__, self)这种python2的写法尽量避免,因为它是多余的、较慢的(使用名称查找)和更冗余的,推荐使用super().__init__写法。

# python3.0+使用
super().__init__
# python2.0+使用
super(__class__, self)

第三种写法,没有super会导致多种继承的能力受到限制,即获取父级能力属性受影响

Base.__init__
结束语:如果遇到什么疑问或者建议的,可直接留言评论!作者看到会马上一一回复

如果觉得小白此文章不错或对你有所帮助,期待你的一键三连!❤️ ni ~

你可能感兴趣的:(#,Python,python,开发语言,python3)