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

子类调用父类__init__时参数n未定义问题咨询

子类调用父类__init__时的变量未定义问题分析

嘿,我来帮你理清楚这个问题~首先明确一点:你的ComputerGame类已经继承了Toy的__init__方法,问题根本不是没继承,而是参数传递出错了。咱们一步步拆解:

问题根源

你在ComputerGame的__init__里写了Toy.__init__(self,n),但这里的n既没有作为参数传入子类的构造方法,也没有在方法内部定义,Python自然找不到这个变量,所以会报“变量n未定义”的警告。

另外补充个知识点:当子类自己定义了__init__方法时,Python不会自动调用父类的__init__(这叫“方法覆盖”),所以你必须显式调用父类构造,但前提是要传对参数。

解决方案

有两种常见的修复方式,你可以根据需求选择:

方式1:子类构造方法接收n参数,传递给父类

修改ComputerGame的__init__,让它接收n参数,再传递给父类的构造方法:

class ComputerGame(Toy):
    def __init__(self, n):  # 这里添加n参数,接收外部传入的值
        Toy.__init__(self, n)  # 现在n有定义了,可以正常传给父类
        self.__Catogory = ""
        self.__Console = ""
    # 其他方法保持不变

方式2:给n设置默认值(可选)

如果希望创建ComputerGame实例时可以不用强制传n,可以给参数加默认值,同时推荐用super()代替直接写父类名调用,更灵活:

class ComputerGame(Toy):
    def __init__(self, n="默认游戏名称"):  # 设置默认值
        super().__init__(n)  # super()会自动处理继承关系,多继承场景更友好
        self.__Catogory = ""
        self.__Console = ""
    # 其他方法保持不变

关于“是否需要在类外声明变量”

完全不需要!n是父类Toy构造方法需要的参数,你只需要在创建ComputerGame实例时传入就行(或者像上面那样给默认值),比如:

# 创建实例时传入n的值
my_game = ComputerGame("我的世界")

内容的提问来源于stack exchange,提问作者Jacob.L

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:06:32