最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 怎么使用python中super()方法?

    正文概述    2020-07-02   172

    想必大家在编写代码,尤其是类的集成,会经常使用super这个方法吧,因此这个方法作用非常大,具体要怎么去利用呢?一起来看下吧~

    为什么要用super?

    1、让代码维护更加简单

    Python是一门面向对象的语言,定义类时经常用到继承的概念,既然用到继承就少不得要在子类中引用父类的属性,我们可以通过“父类名.属性名”的方式来调用,代码如下: 

    class A:
        def fun(self):
            print('A.fun')
     
    class B(A):
        def fun(self):
            A.fun(self)
            print('B.fun')

    一旦A类类名改了,我们就要分别到那几十上百个子类中修改,不但要改继承时用到的A类名,调用A类方法时用到的A类名也要改,繁琐的很,用super就好多了:

    class A:
        def fun(self):
            print('A.fun')
     
    class B(A):
        def fun(self):
            super().fun()
            print('B.fun')

    2、解决多继承带来的重复调用(菱形继承)、查找顺序(MRO)问题

    Python是的继承机制是多继承,还是用这种方法来调用父类属性就会就回带来许多问题。假如有A、B、C、D这4个类,继承关系如下,我们要在各子类方法中显式调用父类的方法(姑且不考虑是否符合需求):

    怎么使用python中super()方法?

    用“父类名.属性名” 的方式调用,代码如下:

    class A:
        def fun(self):
            print('A.fun')
     
    class B(A):
        def fun(self):
            A.fun(self)
            print('B.fun')
     
    class C(A):
        def fun(self):
            A.fun(self)
            print('C.fun')
     
    class D(B , C):
        def fun(self):
            B.fun(self)
            C.fun(self)
            print('D.fun')
     
    D().fun()

    输出结果为:

    A.fun
    B.fun
    A.fun
    C.fun
    D.fun

    A类被实例化了两次。这就是多继承带来的重复调用(菱形继承)的问题。使用super可以很好的解决这一问题:

    class A:
        def fun(self):
            print('A.fun')
     
    class B(A):
        def fun(self):
            super(B , self).fun()
            print('B.fun')
     
    class C(A):
        def fun(self):
            super(C , self).fun()
            print('C.fun')
     
    class D(B , C):
        def fun(self):
            super(D , self).fun()
            print('D.fun')
     
    D().fun()

    输出结果如下:

    A.fun
    C.fun
    B.fun
    D.fun

    怎么用super?

    super是一个类(不是方法),实例化之后得到的是一个代理的对象,而不是得到了父类,并且我们使用这个代理对象来调用父类或者兄弟类的方法。使用格式如下:

    super([type[, object-or-type]])

    将这个格式展开来就有一下几种传参方式:

    super()
    super(type , obj)
    super(type_1 , type_2)

    注意:可没有super(type)这种方式

    因此大家了解为什么要用super方法,以及怎么用super方法了嘛?如需了解更多python实用知识,点击进入起源地模板网教学中心


    起源地下载网 » 怎么使用python中super()方法?

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元