• python类__getitem__()方法


    Python的__getitem__(self,n)方法为拦截索引运算

    当实例s出现s[i]这样的索引运算时,Python会调用这个实例s继承的__getitem__(self,n)方法,并把s作为第一个参数传递(self),将方括号内的索引值 i 传递给第二个参数 n

    >>>class Square():

        def __getitem__(self,n):

          return n**2

    >>>s = Square()

    >>>s[2]

    4

    >>>s[6]

    36

    >>>class Fib():

        def __getitem__(self,n):
          a,b = 1,1
          for x in range(n):
            a,b = b, a + b
          return a

    >>> f = Fib()  #创建了一个实例f

    >>>f[0]   # n = 0, x in range(0)--- x 为空, a = 1 

    1

    >>>f[1] # n = 1, x = 0, a = b = 1,b=2

    1

    >>>f[2] # n = 2, x=1,a=b=2,b=3

    2

    >>>class Fib():

        def __init__(self):
          self.a,self.b = 0, 1

        def __iter__(self):
          return self

        def __next__(self):
          self.a, self.b = self.b, self.a + self.b
          if self.a > 10000:
            raise StopIteration()
          return self.a

        def __getitem__(self,n):
          a,b = 1,1
          for x in range(n):
            a,b = b, a + b
          return a

    >>> f = Fib()    #现在实例 f 既可以迭代,又可以根据索引来取值

    >>>for i in f:   #此时Python先寻找__iter__()方法,返回迭代器对象f(实例),它继承了Fib()类的__next__()方法,接下来Python会重复调用实例 f 的next方法,直到抛出StopIteration异常

        print(i)

    .......

    >>>f[0]

    1

    >>>f[5]

    8

  • 相关阅读:
    postman 调用webservice方法
    .net core 传JSON对象Controller接收不到的问题处理方法
    java不同基本类型之间的运算
    重写和重载
    java基本数据类型介绍
    浏览器tab页签切换事件
    设计模式之观察者模式
    设计模式之状态模式
    设计模式之备忘录模式
    设计模式之迭代器模式
  • 原文地址:https://www.cnblogs.com/lyu454978790/p/8625888.html
Copyright © 2020-2023  润新知