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

在函数内实例化嵌套类报错:NameError: bataljon未定义求助

解决方案:Python嵌套类的正确访问方式

在Python中,类内部定义的嵌套类属于外层类的类属性,不能在实例方法中直接通过类名访问,必须通过外层类的引用或者实例的__class__属性来调用,这就是你遇到NameError的原因。

正确写法示例

方式1:直接通过外层类名访问嵌套类

class GameClass:
    # 定义嵌套类
    class bataljon:
        def __init__(self):
            print("bataljon 实例化成功")

    def game_script(self):
        # 用外层类名引用嵌套类
        my_bataljon = GameClass.bataljon()

方式2:通过self.__class__访问(更适合继承场景)

如果你的GameClass可能被子类继承,用这种方式可以让子类自动使用自身的嵌套类(如果子类重写了bataljon):

class GameClass:
    class bataljon:
        def __init__(self):
            print("bataljon 实例化成功")

    def game_script(self):
        # 通过实例的__class__属性引用嵌套类
        my_bataljon = self.__class__.bataljon()

为什么放在__init__里没用?

如果你把bataljon的定义放在__init__方法中,它会变成GameClass实例的属性,而不是嵌套类。这种情况下你需要用self.bataljon()来实例化,但这会导致每次实例化GameClass都重新定义一次bataljon类,既冗余又不符合嵌套类的设计初衷,完全没必要这么做。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:01:26