当前位置: 首页 > news >正文

解码 __getitem__ 和 __len__ - 自定义序列的钥匙

文章目录

  • 前言
  • 一、什么是 `__getitem__` 和 `__len__`?
  • 二、`__getitem__`:索引访问的魔法
    • 2.1 基本用法
    • 2.2 灵活应用
  • 三、`__len__`:长度查询的钥匙
    • 3.1 基本用法
    • 3.2 在 Vocab 中的应用
  • 四、 结合使用:打造完整序列
  • 五、为什么需要 `__getitem__` 和 `__len__`?
  • 六、 实际应用场景
  • 总结


前言

Python 的魅力之一在于它的灵活性:内置类型如列表、字典和元组让我们轻松处理数据,而当这些类型不够用时,我们还能打造自己的“定制容器”。在“Python 解码”系列的第三篇中,我们将聚焦两个魔法方法——__getitem____len__,它们是自定义序列类型的核心钥匙。

想让你的类支持索引访问(如 obj[0])?想让 len() 函数返回对象的长度? __getitem____len__ 正是实现这些功能的秘密武器。通过本文,你将学会如何用它们解锁 Python 数据模型的潜能,打造属于自己的序列类型。让我们一起开启这场探索吧!


一、什么是 __getitem____len__

在 Python 中,__getitem____len__ 是特殊方法(也叫“魔法方法”或“dunder 方法”),属于 Python 数据模型的一部分。它们让自定义对象能够模仿内置序列类型(如列表或元组)的行为:

  • __getitem__:定义对象在被索引或键访问(obj[key])时的行为。
  • __len__:定义对象在调用 len() 函数时的行为,返回长度。

这两个方法简单却强大,结合起来可以让你的类表现得像一个完整的序列,支持索引、长度查询,甚至迭代。接下来,我们逐一解码它们的用法。

二、__getitem__:索引访问的魔法

__getitem__ 是自定义对象支持 [] 操作的关键。当你写下 obj[key] 时,Python 会自动调用 obj.__getitem__(key)。这里的 key 可以是整数(索引)、切片(slice),甚至是其他类型(例如字典的键)。

2.1 基本用法

让我们创建一个简单的类 MyList,模拟列表的索引行为:

class MyList:
    def __init__(self, data):
        self.data = data

    def __getitem__(self, index):
        return self.data[index]

# 使用示例
ml = MyList([1, 2, 3, 4])
print(ml[0])      # 输出: 1
print(ml[1:3]) 
http://www.dtcms.com/a/108088.html

相关文章:

  • Prompt攻击是什么
  • Go和Golang语言简介
  • 快速排序与归并排序
  • 【硬件视界10】网络硬件入门:音频设备详解:声卡与音响系统
  • 【区块链 + 可信存证】国链区块链可信存证系统| FISCO BCOS 应用案例
  • 使用Qemu模拟32位ARM系统
  • OpenCV图像形态学:原理、操作与应用详解
  • 前端实现单点登录(SSO)的方案
  • Pycharm(十二)列表练习题
  • mac环境中Nginx安装使用 反向代理
  • 通俗解释 TCP 的三次握手、四次挥手
  • 《深度探索:数据库树形数据遍历与节点更新的游标之道》
  • 在PyTorch中使用GPU加速:从基础操作到模型部署
  • React-01React创建第一个项目(npm install -g create-react-app)
  • 【扣子agent入门】搭建计算热量工作流
  • 【QT】构建项目
  • DIY搭建网站(学术个人介绍主页)
  • 2025年大模型与Transformer架构:重塑AI未来的科技革命
  • docker的入门以及使用
  • unity运行中场景指定模型回放功能(模型是地形并且可以加载预制体进行回放)
  • Java面试黄金宝典30
  • 无需安装Office进行 Word、Excel操作的微软开发库
  • MySQL 锁机制:数据库的交通管制系统
  • 2023年12月电子学会青少年软件编程图形化三级考级真题—打砖块游戏
  • 用Rust和WebAssembly打造轻量级前端加密工具
  • RNN模型与NLP应用——(7/9)机器翻译与Seq2Seq模型
  • SOME/IP-SD -- 协议英文原文讲解9(ERROR处理)
  • GitHub二次验证登录2FA(Enable two-factor authentication )
  • 手搓多模态-01 对比损失的优化
  • python网络爬虫开发实战之数据的存储