Discuss / Python / Fib实例可以使用列表生成式取出元素

Fib实例可以使用列表生成式取出元素

Topic source

中大-雪山

#1 Created at ... [Delete] [Delete and Lock User]

<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

你理解错了;

__getitem__ 可以让你直接从实例里面get元素

即: >>> f = Fib() >>> f[5] # f是Fib类的实例

你的做法是利用__iter__方法和列表生成式生成了一个list,再从这个list里get元素,这个list已经脱离了Fib类。

即: >>> L[5] # L只是从Fib类中获得了斐波那契数列,并没有获得其他属性或方法

个人见解,欢迎质疑批评.


  • 1

Reply