当在类中遇到嵌套列表时(更具体地说,我应该将其称为多元函数),我可以使用 __getitem__
有两个或多个参数的方法?
我知道这不是 __getitem__
的典型用法我应该将它写为类的方法,但我真的想利用它的 []
功能。
这确实一点也不非典型; numpy 总是这样做。 __getitem__
接受单个参数;它可以是一个元组。您只需要自己解析元组即可。
class Indexer(object):
def __init__(self, *args, **kwargs):
pass
def __getitem__(self, item):
if isinstance(item, tuple):
# do special processing for tuples here
print(item)
# Everyone likes the number 3, so make sure to return an extra 3.
return [item, 3]
i = Indexer()
# this will print (2, 3), and got_item will have the value [(2, 3), 3]
got_item = i[2,3]
# This will print [(2, 3), 3]
print(got_item)
显然没有真正的理由返回[item, 3]
,但它只是表明__getitem__
内部的代码可以做任何它想做的事情。您可以退回任何您想要的东西。
每当 Python 解释器看到您索引某些内容时(如代码示例中的 i[2, 3]
所示),它所做的第一件事就是用方括号之间的内容构建一个元组。您可以使用dis来检查这一点模块,它反汇编 python 代码以查看解释器真正在做什么:
import dis
dis.dis('a[b, c]')
1 0 LOAD_NAME 0 (a)
3 LOAD_NAME 1 (b)
6 LOAD_NAME 2 (c)
9 BUILD_TUPLE 2
12 BINARY_SUBSCR
13 RETURN_VALUE
如果您以前从未见过 dis 的输出,它可能会有点令人困惑。重要的部分是BUILD_TUPLE
之前它说BINARY_SUBSCR
。
这可能是太多信息:重要的是您可以使用 __getitem__
做任何您想做的事情。
我是一名优秀的程序员,十分优秀!