在Python中,一切都是对象。在幕后的这些对象上有许多‘ordinary’系统调用方法,这些对于程序员是不可见的。这就是所谓的魔术方法。 python中的魔术方法是运行任何普通python代码时都会调用的特殊方法。为了区分它们的正常函数,它们周围有两个下划线。
如果要添加a和b,则编写以下语法:
c = a + b
在内部它称为:
c = a.__add__(b)
__getitem__()
是Python中的魔术方法,在类中使用时,允许其实例使用[]
(索引器)运算符。假设x是此类的一个实例,那么x[i]
大致相当于type(x).__getitem__(x, i)
。
方法__getitem__(self, key)
使用符号定义访问项目时的行为self[key]
。这也是可变和不可变容器协议的一部分。
例:
# Code to demonstrate use
# of __getitem__() in python
class Test(object):
# This function prints the type
# of the object passed as well
# as the object item
def __getitem__(self, items):
print (type(items), items)
# Driver code
test = Test()
test[5]
test[5:65:5]
test['GeeksforGeeks']
test[1, 'x', 10.0]
test['a':'z':2]
test[object()]
输出:
<class 'int'> 5 <class 'slice'> slice(5, 65, 5) <class 'str'> GeeksforGeeks <class 'tuple'> (1, 'x', 10.0) <class 'slice'> slice('a', 'z', 2) <class 'object'> <object object at 0x7f75bcd6d0a0>
与某些其他语言不同,Python本质上允许您将任何对象传递到索引器中。您可能会惊讶于test[1, 'x', 10.0]
实际解析。对于Python解释器,该表达式等效于此:test.__getitem__((1, 'x', 10.0))
。如您所见,1,‘x’,10.0部分被隐式解析为元组。的test[5:65:5]
表达式使用Python的slice语法。等效于以下表达式:test [slice(5,65,5)]。
这个__getitem__
magic方法通常用于列表索引,字典查找或访问值范围。考虑到它的通用性,它可能是Python使用最多的魔术方法之一。
注:本文由纯净天空筛选整理自vanigupta20024大神的英文原创作品 __getitem__() in Python。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。