Python __iter__和for循环
据我所知,我可以使用返回迭代器的
__iter__
方法在对象上使用for
循环结构。我有一个对象,我实现了以下__getattribute__
方法:
def __getattribute__(self,name):
if name in ["read","readlines","readline","seek","__iter__","closed","fileno","flush","mode","tell","truncate","write","writelines","xreadlines"]:
return getattr(self.file,name)
return object.__getattribute__(self,name)
我有这个类的对象,a
发生以下情况:
>>> hasattr(a,"__iter__")
True
>>> for l in a: print l
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'TmpFile' object is not iterable
>>> for l in a.file: print l
...
>>>
所以python看到a
有一个__iter__
方法,但不认为它是可迭代的。我做错了什么?这是python 2.6.4。
没有找到相关结果
已邀请:
2 个回复
剑哎
实际上不是一个实例方法,而是一个类方法。也就是说,
被称为,而不是
。 这是由于引擎优化,允许Python运行时更快地设置迭代器。这是必需的,因为迭代器尽可能快地非常重要。 不可能为底层
类型定义
,因此无法动态返回此方法。这适用于大多数
;你需要写一个实际的包装器。
贡炮逗握惫
的文档,其中说: 这个方法可能仍被绕过 查找特殊方法作为 通过隐式调用的结果 语言语法或内置函数。 在这种情况下,您需要做的是提供转发呼叫的直接实现
: