__getitem__在python中重载

gth*_*thm 5 python operator-overloading python-2.7

我试图理解python中的运算符重载,我编写了一个重载__getitem__()方法并调用for循环的小程序:

class Ovl:
    data = [1,2,3,4,5]
    def __getitem__(self, index):
        return "Hiii"

x=Ovl()

for item in x:
    print item
Run Code Online (Sandbox Code Playgroud)

该程序进入无限循环打印"Hiii".我想知道背后的原因.

fal*_*tru 12

根据object.__getitem__NOTE,

注意:for循环期望为非法索引引发一个IndexError,以便正确检测序列的结尾.

>>> class Ovl:
...     data = [1,2,3,4,5]
...     def __getitem__(self, index):
...         if index >= 5:
...             raise IndexError('End')
...         return "Hiii"
...
>>> x=Ovl()
>>>
>>> for item in x:
...     print item
...
Hiii
Hiii
Hiii
Hiii
Hiii
Run Code Online (Sandbox Code Playgroud)