You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术咨询:super关键字指向的类是什么?多继承场景下如何判定?

嘿,这个问题问到点子上了,我来给你掰扯清楚super关键字的那些事儿~

1. super关键字指向的是哪个类?

简单来说,super()的指向不是固定的某个类,它是根据当前类的**方法解析顺序(MRO,Method Resolution Order)**来确定下一个要调用的类的。

在最常见的单继承场景里,MRO是线性的,所以super()看起来就是指向子类直接继承的父类。比如:

class Parent:
    def say_hi(self):
        print("Hi from Parent!")

class Child(Parent):
    def say_hi(self):
        super().say_hi()  # 这里super指向Parent类

但本质上,它是在MRO列表里找当前类的下一个类——单继承时MRO就是Child → Parent → object,所以下一个就是Parent。

2. 多继承场景下的super行为

你的疑问里提到的“最先创建的类”是个误区,super的指向和类的创建顺序没关系,完全由当前类的MRO列表决定。

举个直观的例子:

class A:
    def func(self):
        print("From A")

class B(A):
    def func(self):
        print("From B")
        super().func()

class C(A):
    def func(self):
        print("From C")

class D(B, C):
    def func(self):
        print("From D")
        super().func()

我们先看D的MRO列表:D → B → C → A → object。当你调用D().func()时:

  • D里的super().func()会调用B的func;
  • B里的super().func()不会调用A,而是调用C的func(因为B在MRO里的下一个类是C,不是A!)

所以在多继承里,super()指向的是MRO列表中当前类的下一个类,它可能是当前子类的直接父类,也可能是另一个间接父类,完全由继承结构和C3算法计算出的MRO决定,和类创建的先后顺序无关。

内容的提问来源于stack exchange,提问作者zrobot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:05:02