栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

super()和直接调用超类之间的区别

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

super()和直接调用超类之间的区别

对于单继承,

super()
只是引用基本类型的一种更简单的方法。这样,您可以使代码更具可维护性,例如,如果您想更改基本类型的名称。当您在
super
各处使用时,只需在
class
生产线中进行更改即可。

真正的好处是多重继承。使用时

super
,单个调用不仅会自动调用 所有 基本类型的方法(以正确的继承顺序),而且还会确保每个方法仅被调用一次。

本质上,这使类型具有菱形属性,例如,您有一个基本类型

A
,又有两个类型
B
C
它们都从派生
A
。然后,您有一个
D
既继承自
B
and的类型
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()ABCD<__main__.D object at 0x000000000371DD30>

现在,让我们再次手动调用基本类型的方法来完成所有操作:

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()A2B2A2C2D2<__main__.D2 object at 0x0000000003734E48>

如您所见,

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/639499.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号