__getitem__
根据以下程序,下列选项中,说法正确的是()
class Foo():
def __init__(self):
pass
def __getitem__(self,pos):
return range(0,30,10)[pos]
foo = Foo()
A foo对象表现得像个序列
B 可以使用len(foo)来查看对象foo的元素个数
C 可以使用for i in foo:print(i)来遍历foo的元素
D 不能使用foo[0]来访问对象foo的第一个元素
选项分析:
- A 错误:序列(sequence)通常需要支持长度查询(__len__)和整数索引访问(__getitem__)。foo 对象虽然可以通过 __getitem__ 进行索引访问,但未定义 __len__ 方法,因此不符合完整的序列协议。
- B 错误:foo 类没有实现 __len__ 方法,调用 len(foo) 会抛出 TypeError。
- C 正确:定义了 __getitem__ 的对象,Python 的迭代机制会自动尝试从索引 0 开始调用,直到捕获 IndexError 为止。因此,for i in foo: print(i) 可以正常遍历元素,输出 0、10、20。
- D 错误:foo 实现了 __getitem__ 方法,完全支持通过索引(如 foo[0])访问元素。

