内置的下一个方法表现奇怪

时间:2016-12-01 17:28:55

标签: python python-2.7 oop pcap

enter image description here

当我使用导入的包时,我使用它给我的对象。我发现它有一个next方法,所以我只是尝试使用next()内置函数来生成它的下一项,但是出了点问题。我想知道Object的内置方法是什么,我以前从未见过它。我正在使用python 2.7.12 谢谢!

2 个答案:

答案 0 :(得分:0)

next()内置函数的表现非常好。虽然Reader()似乎确实有next()方法,但却缺少另一种重要方法。 next()内置函数需要一个迭代器对象,这就是引发TypeError的原因。

如果要以迭代器的方式使用类,则至少需要两种方法:

  • __iter__()用于呼叫next()
  • next()(在Python 3中更改为__next__)返回迭代器中的下一个项目。

Python 2.7 documentations definition for next() can help confirm this

  

通过调用其next()方法从迭代器中检索下一个项目。如果给定default,则在迭代器耗尽时返回,否则引发StopIteration。

最可能的情况是Reader类没有实现__iter__()方法,这意味着无法调用next()方法。

答案 1 :(得分:0)

看起来您正在使用Pcapy Reader个对象。虽然这个对象有一个名为next的方法,但它不是一个迭代器,也不支持迭代。

通常,这没关系,next内置函数会看到next方法并调用它,但是Reader是用C语言编写的。 C必须在表示类型的C结构中提供tp_iternext函数,而不仅仅是next方法,才能被识别为迭代器,并且此类型将tp_iternext设置为0。