从嵌套类创建相同类型的python对象

从嵌套类创建相同类型的python对象,python,oop,nested,Python,Oop,Nested,我需要一些关于我遇到的一个奇怪问题的提示,我不是一个完全的python新手,但我以前从未见过这个 我有一个名为List的类,其中有一个嵌套类,\u Node。我可以: 在列表中初始化列表类型的对象 在列表中初始化_Node类型的对象 在_节点内初始化列表类型的对象 但是,我无法在_节点中初始化_节点。下面代码的最后一行导致NameError:未定义全局名称“\u Node” 我如何解决这个问题?使_Node类成为unested类是可行的,但是我计划在同一个文件中有多种类型的列表,所有伴随的节点都

我需要一些关于我遇到的一个奇怪问题的提示,我不是一个完全的python新手,但我以前从未见过这个

我有一个名为List的类,其中有一个嵌套类,\u Node。我可以:

在列表中初始化列表类型的对象 在列表中初始化_Node类型的对象 在_节点内初始化列表类型的对象 但是,我无法在_节点中初始化_节点。下面代码的最后一行导致NameError:未定义全局名称“\u Node”

我如何解决这个问题?使_Node类成为unested类是可行的,但是我计划在同一个文件中有多种类型的列表,所有伴随的节点都继承自一个抽象类,所以我尝试的这种结构有点重要

我知道给我的班级命名为“列表”是个坏主意,这只是这个问题的名称。

试着用self.\uuu class\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


在哪里初始化_节点类?它可能只是超出了范围。老实说,我宁愿使用None作为下一个节点的默认值。这是一种廉价而简单的方法来检查是否有继任者。另外,最好不要使用getter/setter。@各位,我真的很欣赏代码质量注释,但这只是快速键入的代码来说明我的问题。我的实际代码与此完全不同:谢谢!很好,很简单,但是你或者有人知道为什么我的代码是错误的吗?据我所知,内部类的作用域应该仍然允许自己被实例化,就像外部类一样。
class List:
    def __init__(self):
        self.root = None
        self.brother = None

    def set_root(self):
        self.root = self._Node()

    def set_brother(self):
        self.brother = List()

    def set_root_next(self):
        self.root.set_next()

    class _Node:
        def __init__(self, next_node=None, data=None):
            self.next_node = next_node
            self.data = data

        def set_next(self):
            self.next_node = _Node()

if __name__ == '__main__':
    x = List()
    x.set_root()
    x.set_brother()
    x.set_root_next()
class List:
    def __init__(self):
        self.root = None
        self.brother = None

    def set_root(self):
        self.root = self._Node()

    def set_brother(self):
        self.brother = List()

    def set_root_next(self):
        self.root.set_next()

    class _Node:
        def __init__(self, next_node=None, data=None):
            self.next_node = next_node
            self.data = data

        def set_next(self):
            self.next_node = self.__class__()

if __name__ == '__main__':
     x = List()
     x.set_root()
     x.set_brother()
     x.set_root_next()