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

Python super()参数:为什么不选择super(obj)?

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

Python super()参数:为什么不选择super(obj)?

仅在Python
2中才需要两个参数的形式。其原因是,它

self.__class__
总是引用继承树中的“叶子”类(即对象的最特定类),但是调用
super
时需要告诉它是当前正在调用的实现,因此它可以在继承树中调用下一个实现。

假设您有:

class A(object):   def foo(self):      passclass B(A):   def foo(self):      super(self.__class__, self).foo()class C(B):   def foo(self):      super(self.__class__, self).foo()c = C()

需要注意的是

c.__class__
C
,始终。现在考虑如果您打电话给我会发生什么
c.foo()

当您调用

super(self.__class__, self)
C的方法时,它将类似于call
super(C,self)
,这意味着“调用C继承的此方法的版本”。那会叫
B.foo
,这很好。但是当您
super(self.__class__,self)
从B呼叫时,它仍然像在呼叫
super(C,self)
,因为它是相同的
self
,所以
self.__class__
仍然如此
C
。结果是B中的调用将再次调用,
B.foo
并且发生无限递归。

当然,您真正想要的是能够调用

super(classThatDefinedTheImplementationThatIsCurrentlyExecuting,self)
,这实际上就是Python 3
super()
所做的。

在Python 3中,您可以做,

super().foo()
并且可以做正确的事。对我来说,你对
super(self)
捷径的含义还不清楚。在Python
2中,由于上述原因,它不起作用。在Python 3中,这将是“ longcut”,因为您可以只使用Plain
super()

super(type)
super(type1, type2)
用途可能仍然偶尔需要在Python 3,但那些总是不正常的情况下,更深奥的用途。



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

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

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