当前位置: 首页 > 工具软件 > super-diamond > 使用案例 >

python 类 super_super()与直接调用超类的区别

姚信鸥
2023-12-01

对于单继承,super()只是引用基类型的一种更奇特的方法。这样,您可以使代码更易于维护,例如,如果您想更改基类型的名称。当您在任何地方使用super时,只需在class行中更改它。

不过,真正的好处在于多重继承。使用super时,一次调用不仅会自动调用all基类型的方法(按照正确的继承顺序),而且还将确保每个方法只调用一次。

这本质上允许类型具有diamond属性,例如,您有一个单一的基类型A,以及两个都派生自A的类型B和C。然后有一个类型D,它同时继承了B和C(使它隐式地继承了A两次)。如果现在显式地调用基类型的方法,则最终将调用A的方法两次。但是使用super,它只调用一次:class A (object):

def __init__ (self):

super().__init__()

print('A')

class B (A):

def __init__ (self):

super().__init__()

print('B')

class C (A):

def __init__ (self):

super().__init__()

print('C')

class D (C, B):

def __init__ (self):

super().__init__()

print('D')

当我们现在实例化D时,会得到以下输出:>>> D()

A

B

C

D

现在,让我们再次手动调用基类型的方法:class A2 (object):

def __init__ (self):

print('A2')

class B2 (A2):

def __init__ (self):

A2.__init__(self)

print('B2')

class C2 (A2):

def __init__ (self):

A2.__init__(self)

print('C2')

class D2 (C2, B2):

def __init__ (self):

B2.__init__(self)

C2.__init__(self)

print('D2')

这是输出:>>> D2()

A2

B2

A2

C2

D2

如您所见,A2发生两次。这通常不是你想要的。当您手动调用使用super的某个基类型的方法时,它变得更加混乱。因此,您应该只使用super()来确保一切正常,并且也不必太担心它。

 类似资料: