You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:52:35