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

Python学习__init__使用及链表add方法报'list'无first属性问题

问题原因分析
  • 语法错误:Pair类的构造方法名拼写错误,你写的__int__是整数类型转换魔术方法,不是实例初始化的__init__,会直接导致创建Pair实例时报错。
  • 类型不匹配错误:你自定义的LinkedList类型是Pair节点组成的链式结构,不是Python原生的list类型。测试时直接传入原生列表[1,2,3],add函数执行时尝试访问lst.first,原生列表没有first属性,直接触发你遇到的报错。
  • 输出逻辑缺失:Pair类没有自定义字符串序列化方法,就算逻辑正确,直接打印Pair实例只会输出内存地址,无法验证结果正确性。
修复方案
  1. 修正Pair类的构造方法名,统一类型标注写法
  2. 新增辅助函数实现原生list到自定义LinkedList的转换
  3. 给Pair类添加__repr__方法,实现可读的打印效果
  4. 修改测试代码,先转换列表格式再调用add函数

完整修正代码

from __future__ import annotations
from typing import Any, Optional


class Pair:
    # 修正构造方法名,把__int__改成__init__,类型标注any改成大写Any
    def __init__(self, first: Any, rest: Optional[Pair]) -> None:
        self.first = first
        self.rest = rest

    # 新增序列化方法,方便打印
    def __repr__(self) -> str:
        return f"{self.first} -> {self.rest}"


LinkedList = Optional[Pair]


def add(lst: LinkedList, index: int, value: Any) -> LinkedList:
    if index == 0:
        return Pair(value, lst)

    if lst is None:
        raise IndexError

    return Pair(lst.first, add(lst.rest, index - 1, value))


# 新增辅助函数:把原生list转成自定义LinkedList
def list_to_linked(native_list: list[Any]) -> LinkedList:
    linked = None
    # 倒序遍历构造链表,保证顺序和原生列表一致
    for item in reversed(native_list):
        linked = Pair(item, linked)
    return linked

修正后的测试代码

# 先把原生列表转成自定义链表
my_linked_list = list_to_linked([1,2,3])
# 调用add方法后打印
print(add(my_linked_list, 1, "hi"))

运行后输出为:1 -> hi -> 2 -> 3 -> None,符合在索引1位置插入"hi"的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:45:07