【发布时间】:2021-04-22 04:07:29
【问题描述】:
class test:
def func(self, *index): return index
def __getitem__(self, *index): return index
t = test()
print(t.func(1)) # (1,)
print(t.func(1, 2)) # (1, 2)
print(t.func(1, 2, 3)) # (1, 2, 3)
到目前为止如此一致。
print(t[1]) # (1,)
print(t[1, 2]) # ((1, 2),)
print(t[1, 2, 3]) # ((1, 2, 3),)
但是现在 1 个参数调用不同。这使得很难使用“len(index)”来询问输入计数。
问:有没有办法询问索引器中包含了多少参数?
例如,t[1] 有 1 个值,t[1, 2] 有 2 个值,t[1, 2, 3] 有 3 个值。
A:(因为它已经关闭)
__getitem__ 总是接收 1 个参数。因此使用 'args' 而不是 '*args' 更清楚。
这决定了方括号中包含多少参数。
class test:
def __getitem__(self, index): return len(index) if type(index) == tuple else 1
t = test()
print(t[1]) # 1
print(t[1, 2]) # 2
print(t[1, 2, 3]) # 3
Answer 使用来自“juanpa.arrivillaga”和“ekhumoro”的信息。
【问题讨论】:
-
您到底想调用
len什么?您究竟应该使用什么索引符号来建模? -
不要使用
*args。像这样定义它:def __getitem__(self, key):。 Python 将自动转换参数以正确处理切片等。然后您可以使用isinstance来检查传入的内容。 -
谢谢@ekhumoro
标签: python parameters arguments tuples