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

如何实例化嵌套类?实例化UseInternalClass遇NameError问题

解决嵌套类结构中实例化UseInternalClass的问题

咱们先拆解你遇到的问题,一步步来解决:

1. 直接触发NameError的核心原因

你错误地把独立类UseInternalClass当成了ParentClass的嵌套类,所以用了ParentClass.UseInternalClass(...)的写法——但实际上UseInternalClass是和ParentClass同级的独立类,根本不在ParentClass内部,Python自然找不到这个不存在的属性。

2. 正确的实例化方式

方式一:使用默认参数快速实例化

因为UseInternalClass的__init__已经把something的默认值设为ParentClass.InternalClass(),所以直接调用类名实例化即可:

MyInstance = UseInternalClass()

方式二:自定义传入InternalClass实例

如果你想传入自己配置的InternalClass对象,直接传参就行,不需要通过ParentClass去调用UseInternalClass:

# 先创建自定义配置的InternalClass实例
my_internal_obj = ParentClass.InternalClass({1:2})
# 再将其传入UseInternalClass
MyInstance = UseInternalClass(something=my_internal_obj)

3. 额外需要修复的代码潜在问题

你的代码里还有两个容易踩坑的地方,建议一起修正:

  • UseInternalClass里的_MyVar只是声明,没有赋值,后续使用会报错,建议初始化它,比如_MyVar = None;
  • 不要用可变对象(比如{})作为方法的默认参数!ParentClass.InternalClass的__init__里parameter = {}会导致所有实例共享同一个字典,后续修改会意外影响其他实例,改成:
class InternalClass(object):
    def __init__(self, parameter=None):
        # 当参数为None时,再创建新字典
        if parameter is None:
            parameter = {}
        pass

同理,UseInternalClass的__init__默认参数也建议改成惰性初始化,避免共享默认对象:

class UseInternalClass(object):
    _MyVar = None  # 初始化类属性
    def __init__(self, something=None):
        if something is None:
            something = ParentClass.InternalClass()
        # 后续业务逻辑

这样修改后,代码就能正常运行啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:18:03