__getitem__() 在Python中
在Python中,一切都是对象。这些对象背后有很多“普通”的系统调用方法,程序员是看不到的。这里出现了所谓的魔术方法。 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()]
输出:
5
slice(5, 65, 5)
GeeksforGeeks
(1, 'x', 10.0)
slice('a', 'z', 2)
与其他一些语言不同, Python基本上允许您将任何对象传递给索引器。您可能会对test[1, 'x', 10.0]
实际解析感到惊讶。对于Python解释器,该表达式等价于: test.__getitem__((1, 'x', 10.0))
。如您所见, 1, 'x', 10.0 部分被隐式解析为元组。 test[5:65:5]
表达式使用 Python 的切片语法。它等价于这个表达式:test[slice(5, 65, 5)]。
__getitem__
魔术方法通常用于列表索引、字典查找或访问值范围。考虑到它的通用性,它可能是 Python 中未被充分利用的魔法方法之一。