Fib实例可以使用列表生成式取出元素
Topic source你理解错了;
__getitem__
可以让你直接从实例里面get元素
即:
>>> f = Fib()
>>> f[5]
# f是Fib类的实例
你的做法是利用__iter__
方法和列表生成式生成了一个list,再从这个list里get元素,这个list已经脱离了Fib类。
即:
>>> L[5]
# L只是从Fib类中获得了斐波那契数列,并没有获得其他属性或方法
个人见解,欢迎质疑批评.
- 1
中大-雪山
<blockquote> __getitem__ Fib实例虽然能作用于for循环,看起来和list有点像,但是,把它当成list来使用还是不行,比如,取第5个元素: >>> Fib()[5] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'Fib' object does not support indexing 要表现得像list那样按照下标取出元素,需要实现getitem()方法:></p></blockquote>
廖大大,这里只要使用列表生成式,就可以按照下标取出元素了 L = [n for n in Fib()] L # [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765] L[5] # 8