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

Python中链表Node类构造函数能否接收next参数?遇NameError求解

Python中实现带递归类型注解的链表Node类

你遇到的NameError是因为在类定义阶段,Node类对象还未完全创建,直接在__init__的参数注解中引用Node会导致解释器找不到这个名字。Python支持递归类型注解,只是需要用正确的方式实现,以下是几种可行方案:

方案1:使用字符串形式的类型注解(兼容Python 3.7及更早版本)

把类型注解写成字符串'Node',解释器不会在类定义时立即解析它,类型检查器(如mypy)会正确识别这个前向引用:

class Node:
    def __init__(self, val: int, next_node: 'Node' = None):
        self.val = val
        self.next = next_node

方案2:使用ForwardRef显式前向引用(Python 3.7+)

从typing模块导入ForwardRef,显式声明要引用的未定义类型:

from typing import ForwardRef

# 先声明前向引用
NodeRef = ForwardRef('Node')

class Node:
    def __init__(self, val: int, next_node: NodeRef = None):
        self.val = val
        self.next = next_node

方案3:使用Self类型注解(Python 3.10+)

Python 3.10及以上版本支持Self类型,专门用来指代类自身,语义更清晰:

from typing import Self

class Node:
    def __init__(self, val: int, next_node: Self | None = None):
        self.val = val
        self.next = next_node

以上三种方案都能让你按预期创建链表节点:

a = Node(3)
b = Node(2, a)
c = Node(1, b)  # c = (1) -> (2) -> (3)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 02:02:21