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

列表与numpy数组中__index__方法的调用时机是什么?

关于Python中__index__()方法的一点理解

嘿,我之前对__index__()这个魔术方法完全没概念,直到碰到相关问题后,才去翻了官方文档、PEP规范还有社区里的讨论,总算搞明白它在索引/切片操作里的作用。

核心逻辑其实是这样的:当你对可索引/可切片的对象(比如列表、numpy数组、pandas的各类数据结构)使用[]运算符时,如果传入的key实现了__index__()方法,那么底层会自动调用这个方法把key转换成整数索引,也就是说lst[key]等价于lst[key.__index__()]。

不过这里得提一句,不同对象的实际表现会有差异:

  • 对于普通Python列表来说,这个逻辑很直接——只要__index__()返回合法的整数,就能正确定位到对应位置的元素;
  • 但numpy和pandas的情况要复杂得多,因为它们的索引系统本身就做了扩展:numpy会结合数组维度对返回的整数做校验,pandas则会把这个逻辑和自身的标签索引体系结合起来,最终结果取决于这些库对__index__()的具体实现。

举个简单的自定义类例子,你就能直观感受到它的作用:

class CustomIndex:
    def __index__(self):
        # 固定返回整数2
        return 2

my_list = ["苹果", "香蕉", "橙子", "葡萄"]
# 使用CustomIndex实例作为索引
print(my_list[CustomIndex()])  # 输出:橙子

当然,也不是所有索引场景都依赖__index__(),比如切片对象slice(1, 3)就有自己的处理逻辑,但如果你想让自定义对象能被当作整数索引使用,实现__index__()就是必须的步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:09:26