官网解释:

object.__getitem__(self,key)

Called to implement evaluation ofself[key]. For sequence types, the accepted keys should be integers and slice objects. Note that the special interpretation of negative indexes (if the class wishes to emulate a sequence type) is up to the__getitem__()method. Ifkeyis of an inappropriate type,TypeErrormay be raised; if of a value outside the set of indexes for the sequence (after any special interpretation of negative values),IndexErrorshould be raised. For mapping types, ifkeyis missing (not in the container),KeyErrorshould be raised.

Note:

forloops expect that anIndexErrorwill be raised for illegal indexes to allow proper detection of the end of the sequence.


对于Fibonacci数列,当我们想抽取特定位置的值看,那又该怎么做,于是就出来了__getitem__这样的函数。


int、list类型:切片(没有step)

#!/usr/bin/python

# -*- coding: utf-8 -*-


class Fib(object):

def __getitem__(self, n):

if isinstance(n, int): # n是索引

a, b = 1, 1

for x in range(n):

a, b = b, a + b

return a

if isinstance(n, slice): # n是切片

start = n.start

stop = n.stop

if start is None:

start = 0

a, b = 1, 1

L = []

for x in range(stop):

if x >= start:

L.append(a)

a, b = b, a + b

return L

f = Fib()

print f[0:4]

print f[9]