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

  • 相关阅读:
    codeforces 980A Links and Pearls
    zoj 3640 Help Me Escape
    sgu 495 Kids and Prizes
    poj 3071 Football
    hdu 3853 LOOPS
    hdu 4035 Maze
    hdu 4405 Aeroplane chess
    poj 2096 Collecting Bugs
    scu 4444 Travel
    zoj 3870 Team Formation
  • 原文地址:https://www.cnblogs.com/wqbin/p/10389593.html
Copyright © 2011-2022 走看看