御笔剑客 发表于 2020-6-16 14:53:08

关于super函数的问题

在python中,我见到了2种super函数调用父类init方法的用法,这两种用法有什么区别呢?

第一种是super中无任何参数,第二种是super中带有参数,第一个参数为类本身,第二个参数为self

class A:
    def __init__(self):
      print('A')

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

class C(A):
    def __init__(self):
      print('C')
      super(C, self).__init__()

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

Twilight6 发表于 2020-6-16 15:06:23


应该可以这么理解:

super 没填参数时候 Python 会自动传入默认值,比如这里的:
class B(A):
    def __init__(self):
      print('B')
      super().__init__()# 等价于 super(B,self).__init__()


然后如果传入参数就是在父类链中指定调用的是哪个类的父类方法,比如:
class A:
    def __init__(self):
      print('A')

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

class C(A):
    def __init__(self):
      print('C')
      super(B, self).__init__()# 指明调用 B类的 父方法


页: [1]
查看完整版本: 关于super函数的问题