我如何知道MRO中哪条路径正好是super()?
答案 0 :(得分:2)
阅读:Python's Super Considered Harmful和Python’s super() considered super!。
这是两个应该回答你所有问题的重要资源。
简而言之,super()
使用标准的方法解析顺序(MRO)来查找您要求的方法。看看这张图片:
E继承自C和D. C继承自A,而{A}来自object
。 D继承自B,而B来自object
。红色箭头显示super()
在搜索中使用的MRO。
请注意,super()
不引用父类。即使A继承自object
而不是D,D在MRO中接下来。所以要回答你的问题,"接下来排队"是指MRO。
答案 1 :(得分:1)
Python中super()的主要目的是在派生类中调用重写的基类方法,就像在其他语言中一样。 通常这样做是为了派生类方法可以通过在自己的代码之前或之后调用它来扩充基类1,而不是完全替换它。
onBackPress()
super()函数实际上是通过返回委托调用父代理的代理类的对象来实现的。 在这种情况下使用super()的优点是您不需要显式命名基类,这有助于维护。
super()函数也可用于更复杂的多继承情况,它可以执行委托给姐妹类的事情