Python列表内Node对象访问value属性触发AttributeError求助
问题分析与修复
错误根源
你的代码里ListAlt类的初始化方法存在关键错误:
def __init__(self): self.queue = [Node]
这里你把Node类本身塞进了队列列表,而非初始化一个空队列。当dequeue方法遍历队列时,第一个元素是Node类(不是Node实例),类本身没有value属性,因此触发AttributeError: type object 'Node' has no attribute 'value'。
另外,即便修复队列初始化,原代码print(lista.dequeue())会打印Node对象的内存地址,要得到预期的10,需明确打印对象的value属性。
修正后的完整代码
#!/usr/bin/python3 class Node(): def __init__(self, id : int, value : int): self.id = id self.value = value class ListAlt(): def __init__(self): self.queue = [] # 初始化空队列,不再放入Node类 def append(self, node : Node): self.queue.append(node) def dequeue(self): idMax = 0 i = 0 for nodo in self.queue: if (nodo.value > self.queue[idMax].value): idMax = i i += 1 result = self.queue[idMax] self.queue.pop(idMax) # 取出后从队列移除元素,符合优先级队列逻辑 return result n1 = Node(1,10) n2 = Node(2,3) n3 = Node(3,6) lista = ListAlt() lista.append(n1) lista.append(n2) lista.append(n3) print(lista.dequeue().value) # 打印value属性,输出预期的10
补充说明
添加self.queue.pop(idMax)是为了符合标准优先级队列的出队逻辑——取出元素后从队列中移除,否则每次调用dequeue都会返回同一个最大元素。
内容的提问来源于stack exchange,提问作者ismael roman rey
相关产品推荐
相关产品推荐

