【Python基础教程】super()函数的正确使用方法

1.super(本身类名,self).方法名(参数)这样就可以调用父类的方法和参数了,super()内也可不加参数
2.规律是super是按调用的次序执行,super后面的语句是逆向执行的。

有2段示例代码,不同的在于value有没有用self.value表示。用self.value表示传入的参数,会产生类似递归的效果进来的One,Two,返回是Two,One。

用value表示则是按照顺序传递的。

class Base:
    def __init__(self, value):
        self.value = value

程序1:

foo = Ways(5)
  • 先调用super(Ways, self).__init__(value)
  • 再调用super(One, self).__init__(value)super(Two, self).__init__(value)
  • 再调用self.value = value,此时self.value为5

其后类似递归的逐渐返回

  • 调用self.value += 3, self.value为8
  • 调用self.value *= 2,self.value为16,注意进来的One,Two,返回是Two,One
'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class One(Base):
   def __init__(self, value):
       super(One,self).__init__(value)# super(本身类名,self).方法名(参数)这样就可以调用父类的方法和参数了
       self.value *= 2


class Two(Base):
   def __init__(self, value):
       super(Two,self).__init__(value)
       self.value += 3


class Ways(One, Two):
   # super是继承父代
   def __init__(self, value):
       super(Ways,self).__init__(value)

foo = Ways(5)
print(foo.value) # 菱形继承问题

class Base:
   def __init__(self, value):
       self.value = value


class One(Base):
   def __init__(self, value):
       super(One, self).__init__(value * 2)

程序2:

foo = Ways(5)
  • 先调用super(Ways, self).__init__(value)
  • 再调用super(One, self).__init__(value * 2)super(Two, self).__init__(value + 3),然后调用self.value = value----One调用Base,使self.value为5,运行One,self.value为10,注意Two不再调用Base使self.value再为5,

直接加3,变成13

规律是super是按调用的次序执行,super后面的语句是逆向执行的。

class Two(Base):
   def __init__(self, value):
       super(Two, self).__init__(value + 3)


class Ways(One, Two):
   def __init__(self, value):
       super(Ways, self).__init__(value)

foo = Ways(5)
print(foo.value) # 13

猜你喜欢

转载自blog.csdn.net/sinat_38682860/article/details/120417432