📜  __getitem__() 在Python中

📅  最后修改于: 2022-05-13 01:55:06.190000             🧑  作者: Mango

__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 中未被充分利用的魔法方法之一。