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

子类错误传递self给父类__init__后输出的对象地址含义解析

问题解答:Python对象默认输出的含义与代码错误分析

首先,你看到的 <Wizard.Wizard object at 0x049F20B0> 是Python中对象的默认字符串表示形式,拆解各部分的意思:

  • Wizard.Wizard:说明这个实例来自Wizard模块里的Wizard类(如果代码都在同一个文件中,这里会显示__main__.Wizard);
  • object at 0x049F20B0:0x049F20B0是该对象在计算机内存中的十六进制地址,每个对象在内存中都有唯一的存储位置,这个地址就是它的专属标识。

为什么会出现这种情况?

问题出在Wizard子类的__init__方法里的父类调用:

super().__init__(self,name)

在Python中,使用super()调用父类方法时,不需要手动传递self参数——super()已经自动绑定了当前子类的实例。你多传了一个self,直接导致参数顺序完全错乱:

  • 父类Player的__init__期望第一个参数是name,第二个是player_type;
  • 但你传了self(也就是gandalf实例本身)作为第一个参数,把"Gandalf"当成了第二个参数player_type。

最终的赋值结果完全搞反了:

  • self.name = self(把实例自己赋值给了name属性);
  • self.player_type = "Gandalf"(把本该是名字的字符串赋值给了player_type)。

当你打印gandalf.name时,其实是在打印一个对象,Python就会输出它的默认字符串表示,也就是你看到的那串地址信息。

修正后的代码

把Wizard类的__init__改成这样就正常了:

from Player import Player
class Wizard(Player):
    def __init__(self, name, player_type = "Wizard"):
        super().__init__(name, player_type)

这样调用父类时参数顺序正确,gandalf.name会输出"Gandalf",gandalf.player_type会输出"Wizard"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:41:19