我必须为我的一个班级做一个展开的链表。我是python的新手,但不是编程,出于某种原因我不能解决这个小问题!
我有一个类Node,它是展开的链表中使用的节点对象。展开的链表类执行Node类的所有操作。
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类的最后一行' init 功能:"全局名称Node未定义"。我仔细检查了我的缩进,并在互联网上查看了类似这样的例子,但无法找到。有人会介意向我解释什么是错的吗?
答案 0 :(得分:7)
方法不将其类作为要搜索的范围包含在内。如果您希望这项工作正常,则需要使用UnrolledLinkedList.Node
或self.Node
代替。
答案 1 :(得分:2)
内部班级Node
是班级UnrolledLinkedList
的成员,只能通过self
访问。
def __init__(self, max_node_capacity=16):
self.max_node_capacity = max_node_capacity
self.head = self.Node()
答案 2 :(得分:0)
使用:
self.head = self.Node()
它有效。
类不会创建自己的名称空间。使用self.Node()
,Python首先搜索实例的所有属性。由于它没有找到名称Node
,因此它会在课程UnrolledLinkedList
中搜索Node
。
或者,您可以直接使用班级名称:
UnrolledLinkedList.Node()
您可以在不嵌套班级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()
答案 3 :(得分:0)
使用Node()
:
self
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()
。