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

Python如何在嵌套类内部实例化当前嵌套类?

问题原因及解决方案

你遇到的报错是Python命名空间作用域规则导致的,该嵌套类实例化的需求本身是可实现的,只需要调整代码写法即可。
NestedClass是定义在ExampleClass内部的类,它的作用域只归属ExampleClass的命名空间,不属于全局作用域,也不会被嵌套类自身的方法默认继承,所以在NestedClass的makenew方法内直接调用NestedClass()时,解释器无法在当前局部作用域、全局作用域中找到对应类,就会抛出未定义的异常。


常用解决方案

方案1(最推荐,兼容继承场景)

通过实例的__class__属性获取当前实例对应的类,不需要硬编码类名,后续就算类名修改、类被继承都能正常运行。
完整可运行代码:

class ExampleClass():
    def Example(self):
        self.nestedinstance = self.NestedClass()
        self.nestedinstance.makenew()

    class NestedClass():
        def makenew(self):
            newclass = self.__class__()

ExampleClass().Example()

方案2(硬编码类名,直观易懂)

明确指定嵌套类所属的外层类前缀,直接访问外层类的类属性获取嵌套类,仅需要修改makenew方法内的实例化逻辑即可:

def makenew(self):
    newclass = ExampleClass.NestedClass()

该写法缺点是如果后续修改了外层类ExampleClass的名称,这段代码也要同步调整。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:57:02