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
相关产品推荐
相关产品推荐

