遍历操作-getitem
class Person:
pass
p = Person()
for i in p:
print(i)
以上代码报错如下:
Traceback (most recent call last): File
“G:/Study/Git/FSR/FSRNet/zhongjiema-FSRNet-pytorch-master/FSRNet-pytorch/mzjtest/pytorch学习/getitem.py”,
line 4, in
for i in p: TypeError: ‘Person’ object is not iterable
原因就是自己定义的这个Person类中的对象不能被迭代,那么如何使其能够被迭代呢?
很简单,就是在类中定义方法”getitem“即可。当我们通过for…
in去遍历一个实例的时候,它会检测这个实例有没有实现__getitem__这个方法,如果有,那么就会取出这个方法所返回的数据。
class Person:
def __getitem__(self, item):
pass
p = Person()
for i in p:
print(i)
结果如下:
None None None None None … None None None None None None None None
# class Person:
# def __getitem__(self, item):
# return 1
#
# p = Person()
# for i in p:
# print(i)
结果如下: 1 1 1 1 1 … 1 1 1 1 1 1
为什么会一直返回1呢,因为在__getitem__中没有结束条件,所以说一般在定义__getitem__方法的时候要给出结束条件。下面给出实现方法:
class Person:
def __init__(self):
self.result = 1
def __getitem__(self, item):
self.result += 1
if(self.result >= 6):
raise StopIteration("停止遍历")#一般在这里抛出一个异常
return self.result
p = Person()
for i in p:
print(i)
结果如下:
2 3 4 5