如何实例化嵌套类?实例化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
相关产品推荐
相关产品推荐

