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

为什么Python中super返回的对象与self的id值不一致?

问题原因解答

核心误区澄清

你误解了super的本质:super(D, self) 返回的不是父类C的实例,也不是当前的self对象本身,它是Python内置的代理对象,作用仅为按照类的方法解析顺序(MRO)代理查找父类的方法,本身是独立的新对象。

输出差异的具体逻辑

  • 调用super(D, self).__init__()时,super代理会把找到的__init__方法绑定到你传入的self(也就是你创建的D类实例d)上执行,所以父类C的__init__里打印的id(self),本质就是实例d的id。
  • 你第二次打印的是id(super(D, self)),这里拿到的是临时生成的super代理对象自己的id,和实例d完全是两个不同的对象,id自然不一样。

验证方式

你可以在主逻辑里加一行打印,就能验证上面的结论:

if __name__ == '__main__':
    d = D()
    print(id(d)) # 输出会和第一个打印的id完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:18:03