在函数内实例化嵌套类报错: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
相关产品推荐
相关产品推荐

