如何判断 super() MRO 的下一个顺序是什么?

sup*_*eme -3 python super python-3.x python-3.5

我如何知道 super() 在 MRO 中到底采用哪条路径?

Dan*_*Dan 5

阅读:Python\'s Super 被认为是有害的Python\xe2\x80\x99s super() 被认为是超级!

\n\n

这些是两个很好的资源,应该可以回答您的所有问题。

\n\n

简而言之,super()使用标准方法解析顺序 (MRO) 来查找您需要的方法。看看这张图片:

\n\n

MRO:E、C、A、D、B、对象

\n\n

E 继承自 C 和 D。C 继承于 A,A 继承于object。D 继承自 B,B 继承自object。红色箭头显示在其搜索中使用的 MRO super()

\n\n

注意,super()引用父类。尽管 A 继承自D 而不是 D,但在 MRO 中 D 排在第二位。因此,回答你的问题,“下一个”指的是 MRO。object

\n