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

Python类索引问题:__getitem__报错及预期输出实现

问题分析与修复

错误原因

  1. __getitem__方法参数缺失:Python的__getitem__魔法方法必须接收self和key(索引或键值)两个参数,你写的两个类的__getitem__都只定义了self,当调用book[0]时,Python会自动传入self和0两个参数,直接触发参数不匹配的TypeError。
  2. 不必要的继承:BookList是用来管理多个Books实例的容器,完全不需要继承Books类,继承反而会混淆类的职责。
  3. 未定义变量使用:BookList的__getitem__里用了index变量,但这个变量根本没定义,应该把它作为方法参数传入。

修复后的代码

class Books:
    def __init__(self, title='', year=1):
        self.title = title
        self.year = year

    def __getitem__(self, key):
        # 根据索引返回对应属性,0返回title,1返回year
        if key == 0:
            return self.title
        elif key == 1:
            return self.year
        else:
            raise IndexError("索引超出范围,仅支持0或1")


class BookList:
    def __init__(self):
        self.book_list = []
          
    def store_book(self, book):
        self.book_list.append(book)

    def __getitem__(self, index):
        # 返回列表中对应索引的书籍实例
        return self.book_list[index]

    def showbook(self):
        for book in self.book_list:
            print(book[0], book[1])

book1 = Books('Title 1', 1000)
book2 = Books('Title 2', 1211)
book_list = BookList()
book_list.store_book(book1)
book_list.store_book(book2)
book_list.showbook()

运行结果

Title 1 1000
Title 2 1211

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:18:33