Python - 内部类没有定义?

时间:2016-01-15 21:12:38

标签: python inner-classes

我必须为我的一个班级做一个展开的链表。我是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未定义"。我仔细检查了我的缩进,并在互联网上查看了类似这样的例子,但无法找到。有人会介意向我解释什么是错的吗?

4 个答案:

答案 0 :(得分:7)

方法将其类作为要搜索的范围包含在内。如果您希望这项工作正常,则需要使用UnrolledLinkedList.Nodeself.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()