Python - 内部 class 未定义?

Python - inner class is not defined?

我必须为我的 classes 之一做一个展开的链表。我是 python 的新手,但不是编程新手,出于某种原因我无法解决这个小问题!

我有一个 class 节点,它将成为展开链表中使用的节点对象。展开的链表 class 执行节点 class.

上的所有操作
class UnrolledLinkedList(object):

    """ INNER NODE CLASS """
    class Node(object):
        def __init__(self):
            self.array = []
            self.next_node = None
    """ END NODE CLASS """

    def __init__(self, max_node_capacity=16):
        self.max_node_capacity = max_node_capacity
        self.head = Node()


    """ OTHER FUNCTIONS OF UNROLLEDLINKEDLIST CLASS """

问题出现在 UnrolledLinkedList class' init 函数的最后一行:"global name Node is not defined"。我仔细检查了我的缩进并在互联网上查找了类似这样的例子,但找不到任何东西。有人介意向我解释一下哪里出了问题吗?

方法包括它们的class作为要搜索的范围。如果你想让它起作用,那么你需要使用 UnrolledLinkedList.Nodeself.Node 来代替。

使用:

self.head = self.Node()

而且有效。

A class 没有创建自己的名字 space。使用self.Node(),Python首先搜索实例的所有属性。由于它在那里找不到名称 Node,因此它会在 class UnrolledLinkedList 中搜索 Node.

或者,您可以直接使用 class 名称:

UnrolledLinkedList.Node()

您可以在不嵌套 class Node 的情况下实现相同的效果:

class Node(object):
    def __init__(self):
        self.array = []
        self.next_node = None

class UnrolledLinkedList(object):
    def __init__(self, max_node_capacity=16):
        self.max_node_capacity = max_node_capacity
        self.head = Node()

内部 class Node 是 class UnrolledLinkedList 的成员,只能通过 self.

访问
def __init__(self, max_node_capacity=16):
    self.max_node_capacity = max_node_capacity
    self.head = self.Node()

self 限定 Node():

class UnrolledLinkedList(object):
    class Node(object):
        def __init__(self):
            self.array = []
            self.next_node = None

def __init__(self, max_node_capacity=16):
    self.max_node_capacity = max_node_capacity
    self.head = self.Node()

Python 需要限定对事物的引用。在这种情况下,您可以说 UnrolledLinkedList.Node()self.Node().