1. 程式人生 > >python Class:面向對象高級編程 __getitem__

python Class:面向對象高級編程 __getitem__

util oss sta src highlight cep col html python

官網解釋:

  • object.__getitem__(self, key)

  • Called to implement evaluation of self[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. If key

    is of an inappropriate type, TypeError may be raised; if of a value outside the set of indexes for the sequence (after any special interpretation of negative values), IndexError should be raised. For mapping types, if key is missing (not in the container), KeyError should be raised.

    Note:

    for loops expect that an IndexError
    will 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]

技術分享圖片

python Class:面向對象高級編程 __getitem__