首页 > 试题广场 >

根据以下程序,下列选项中,说法正确的是() class Fo

[单选题]

根据以下程序,下列选项中,说法正确的是()

class Foo():

    def __init__(self):

        pass
    def __getitem__(self,pos):

        return range(0,30,10)[pos]

foo = Foo()

  • foo对象表现得像个序列

  • 可以使用len(foo)来查看对象foo的元素个数

  • 可以使用for i in foo:print(i)来遍历foo的元素

  • 不能使用foo[0]来访问对象foo的第一个元素
只要发生了P[key]取值。当实例对象做P[key]运算时,就会调用类中的__getitem__()方法。
A和B—— foo是一个对象  不可以查看长度
C 因为range(0,30,10)[pos]  所以可以用foo[0]  foo[1] foo[2]分别取值 0  10 20
D 我们发生了取下标的操作就会执行  return [0,10,20][pos]   pos为你取的下标值  所以当我们foo[1]的时候 返回的是10
发表于 2021-12-22 19:48:05 回复(1)
主要考查_getitem_函数的用法  ,使用中括号对对象中的属性进行取值、赋值或者删除时, 
会自动触发对应的__getitem__、__setitem__、__delitem__方法

_getitem_(self,index),index为索引长度,调用对象属性可以像列表或字典一样foo[0]或foo[key] 

print(len(foo))
TypeError: object of type 'Foo' has no len()   返回是一个对象不可以len()查看    

return range(0,30,10)[pos] # return返回一个可迭代对象,
C对  可以for循环遍历,
D不对 可以foo[0]取值属该函数特殊用法
B不对 object of type 'Foo' has no len() 
A 为什么不对呢

 








编辑于 2022-03-04 12:00:57 回复(0)
只要实现了__getitem__和__len__方法,就会被认为是序列
这个类没有实现__len__方法
发表于 2023-03-27 11:19:00 回复(0)
不懂大家的解析,foo到底是个撒。Foo类接受一个参数,返回生成器range的索引位置(接受的参数)对应的元素。A感觉没有问题 可以使用索引 foo不是标准意义的序列 但是表现得像个序列。
发表于 2023-10-12 16:44:04 回复(0)
记录
发表于 2022-11-22 21:08:25 回复(0)
谁能解释解释A选项呢
发表于 2022-03-25 11:09:48 回复(2)