详解Python中的__getitem__方法与slice对象的切片操作
作者:cangmean 时间:2022-04-26 19:54:55
Fib实例虽然能作用于for循环,看起来和list有点像,但是,把它当成list来使用还是不行,比如,取第5个元素:
>>> Fib()[5]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'Fib' object does not support indexing
要表现得像list那样按照下标取出元素,需要实现__getitem__()方法:
class Fib(object):
def __getitem__(self, n):
a, b = 1, 1
for x in range(n):
a, b = b, a + b
return a
现在,就可以按下标访问数列的任意一项了:
>>> f = Fib()
>>> f[0]
1
>>> f[1]
1
>>> f[2]
2
>>> f[3]
3
>>> f[10]
89
>>> f[100]
573147844013817084101
slice对象与__getitem__
想要使类的实例像列表一样使用下标, 可以设置__getitem__方法。比如:
class _List(object):
def __getitem__(self, key):
print key
l = _List()
l[3] # print 3
但是如果想要使用切片操作的
l[1:4] # print slice(1, 4, None)
会创建一个slice对象用于切片,可以通过help(slice)查看具体操作。
a = slice(1, 4, None)
range(5)[a] # print [1, 2, 3]
更加丰富的操作
class _List(object):
def __init__(self, _list):
self._list = _list
def __getitem__(self, key):
if isinstance(key, int):
return self._list[key]
elif isinstance(key, slice):
reutrn self.__class__(self._list[key])
if __name__ == '__main__':
c = _List(range(10))
b = c[1:5]
print b[3] # print 4
如果key是一个整形的话就返回列表元素,如果是一个slice对象的话,就创建一个实例并返回。
标签:Python,getitem,slice
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
golang 微服务之gRPC与Protobuf的使用
2023-06-17 20:36:03
asp如何实现点击数的计算?
2010-05-18 18:39:00
SQL Server 数据库故障修复顶级技巧之一
2010-05-01 18:49:00
PHP入门教程之会话控制技巧(cookie与session)
2023-11-16 00:13:39
python使用分治法实现求解最大值的方法
2021-07-14 12:06:09
ASP中利用OWC控件实现图表功能详解
2010-05-27 12:26:00
Python使用pandas将表格数据进行处理
2023-10-08 06:23:55
![](https://img.aspxhome.com/file/2023/8/70738_0s.png)
Python源码学习之PyType_Type和PyBaseObject_Type详解
2023-08-03 15:50:05
![](https://img.aspxhome.com/file/2023/3/61733_0s.png)
php 进阶:实现无限分类第1/4页
2023-11-17 21:04:55
10个杀手级应用的Python自动化脚本
2023-10-06 14:01:53
ASP编程中使用数组方法实例讲解
2008-02-15 08:25:00
GC与JS内存泄露
2010-09-25 19:01:00
![](https://img.aspxhome.com/file/UploadPic/20109/25/01-21s.jpg)
Python爬虫之获取心知天气API实时天气数据并弹窗提醒
2023-04-17 14:40:58
![](https://img.aspxhome.com/file/2023/0/68870_0s.png)
php+Memcached实现简单留言板功能示例
2023-11-15 09:30:02
![](https://img.aspxhome.com/file/2023/0/85820_0s.png)
解决Python logging模块无法正常输出日志的问题
2023-10-03 17:04:25
超级连接的title提示中如何换行实现多行显示
2008-03-07 15:57:00
深入透析样式表滤镜(下)
2011-06-14 09:49:19
python中的列表和元组实例详解
2023-07-26 23:04:12
![](https://img.aspxhome.com/file/2023/2/65502_0s.png)
商品评论的设计
2009-12-23 13:06:00
![](https://img.aspxhome.com/file/UploadPic/20101/11/1-70s.jpg)
php中如何判断一个网页请求是ajax请求还是普通请求
2023-10-13 14:42:30