在Python中遍历类的实例

时间:2020-04-15 17:24:52

标签: python python-3.x csv

这是我正在使用的代码。

import csv

with open('sample.csv') as csvfile:
    mpg = csv.DictReader(csvfile)
    print(mpg)

输出:

<csv.DictReader object at 0x7f6661fa8780>

上面的代码给了我一个DictReader实例 “ mpg”。

现在,下面的代码让我感到困惑。

with open('sample.csv') as csvfile:
    mpg = csv.DictReader(csvfile)
    for row in mpg:
        print(row)

在这里,我将每一行作为OrderedDict。但是,我的问题是如何遍历DictReader的实例“ mpg”,它最终是对象,而不是列表或类似的东西?

请帮助我理解这个概念。

1 个答案:

答案 0 :(得分:3)

类可以通过定义__iter__()方法来定义如何迭代它们;这应该没有其他参数,并返回有效的迭代器对象。想要成为迭代器的类应实现两个方法:一种行为如上所述的next()方法和一个返回self的__iter__()方法。

PEP 234 -- Iterators

DictReader同时实现__iter__()__next__()。因此,它既可迭代,又可用作迭代器。实际上,__iter__()返回自身,这非常好,因为__next__()可以用作迭代器。请参见GitHub上cpython的实现。请注意,在python 3中,__next__()重命名为next()PEP 3114)。

相关问题