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

Python节点链接异常:类属性误用致实例共享列表问题求助

问题分析与解决:节点链接列表共享导致的异常

你遇到的问题根源非常典型——你在Node类里定义的all_link_incoming和all_link_outgoing是类级别的属性,而非实例属性。

在Python中,直接定义在类内部、不在__init__方法里的属性,会被这个类的所有实例共享。也就是说,你创建的所有Node对象,不管是输入节点还是输出节点,都共用同一个all_link_incoming列表和同一个all_link_outgoing列表。这就解释了为什么:

  • 循环一次时,输出节点2也会出现那个链接——因为所有节点的列表是同一个
  • 最终每个输出节点都有4个链接——所有添加的链接都被放到了同一个共享列表里,所有节点都能看到

另外,你的Link类也有问题:原来的node_incoming和node_outgoing是类属性,初始值为0.0,这显然无法正确保存对应的节点对象,你需要给Link添加构造方法来接收并存储节点实例。

修正方案

把Node类的链接列表改成实例属性,同时完善Link类的构造方法:

class Node:
    def __init__(self):
        # 每个Node实例都会拥有独立的列表,不再共享
        self.all_link_incoming = []
        self.all_link_outgoing = []

class Link:
    def __init__(self, node_incoming, node_outgoing):
        # 用实例属性保存对应的节点对象
        self.node_incoming = node_incoming
        self.node_outgoing = node_outgoing

验证修正后的逻辑

用你原来的循环代码测试:

all_node_input = [Node(), Node()]
all_node_output = [Node(), Node()]

for node_input in all_node_input:
    for node_output in all_node_output:
        link = Link(node_input, node_output)
        node_input.all_link_outgoing.append(link)
        node_output.all_link_incoming.append(link)

# 检查输出节点的链接数量
print(len(all_node_output[0].all_link_incoming))  # 输出:2
print(len(all_node_output[1].all_link_incoming))  # 输出:2

现在每个输出节点只会包含来自两个输入节点的链接,完全符合你的预期。

内容的提问来源于stack exchange,提问作者user8827417

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:12:00