zoukankan      html  css  js  c++  java
  • python继承之super

    super() 函数是用于调用父类(超类)的一个方法。

    super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。

    MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表。

    super(type[, object-or-type])
    super()
    • type -- 类。
    • object-or-type -- 类,一般是 self

    Python3.x 和 Python2.x 的一个区别是: Python 3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx :

    class A:
         def add(self, x):
             y = x+1
             print(y)
    class B(A):
        def add(self, x):
            super().add(x)
    b = B()
    b.add(2)  # 3
    class A:
         def add(self, x):
             y = x+1
             print(y)
    class B(A):
        def add(self, x):
            super(B,self).add(x)
    b = B()
    b.add(2)  # 3

     super(Class, self)要比 super().xxx 灵活,可以跨级调用

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    class o:  # Python2.x 记得继承 object
        def add(self, x):
            print('此处x**2=%d'%x**2)
            return x**2
        pass
    class A(o):   
        def add(self, x):
             y = x+1
             print(y)
    class B(A):
        def add(self, x):
            a=super(A, self).add(x)
            print(a**3)
            
    b = B()
    b.add(2) 

    此处x**2=4
    64

    __init__里使用super

    class A:
        def __init__(self,name,age):
             self.name=name
             self.age=age
        def add(self, x):
             y = x+1
             print(y)
            
    class B(A):
        def __init__(self):
            super(B,self).__init__('wqbin',18)
        def add(self, x):
            pass
    b = B()
    print(b.name)

    wqbin

  • 相关阅读:
    MAC OpenGL 环境搭建
    C++中调用OC代码
    XCode快捷键使用
    【iOS】史上最全的iOS持续集成教程 (下)
    【iOS】史上最全的iOS持续集成教程 (上)
    pod 指令无效
    iOS面试题总结(持续更新)
    数据结构与算法思维导图
    Swift编码规范总结
    同步异步执行问题
  • 原文地址:https://www.cnblogs.com/wqbin/p/10389593.html
Copyright © 2011-2022 走看看