__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])访问元素。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务