python Class:面向对象高级编程 __getitem__

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python Class:面向对象高级编程 __getitem__相关的知识,希望对你有一定的参考价值。

官网解释:

  • object.__getitem__(selfkey)

  • 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__的主要内容,如果未能解决你的问题,请参考以下文章

python Class: 面向对象高级编程 __iter__ 和 next()

python Class:面向对象高级编程 __str__ / __repr__

python Class:面向对象高级编程

Python面向对象高级编程-_slots_

python Class:面向对象高级编程 @property

Python学习---面向对象高级编程