My package has an optional C extension. Here's an abbreviated version of what I have:
try: from pysistence._persistent_list import PList as BasePList except ImportError: class BasePList(object): __slots__ = ['_first', '_rest'] def __init__(self, first, rest=None): self._first = first self._rest = rest def cons(self, item): return self.__class__(item, self)
class PList(BasePList): ... def __iter__(self): .... ...
So what I'm basically doing is subclassing a base class (which is defined in Python or C) and adding an __iter__ method. This works fine if I don't use the C extension, but if I do use it I get the following error:
Traceback (most recent call last): File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/timeit.py", line 297, in main x = t.timeit(number) File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/timeit.py", line 193, in timeit timing = self.inner(it, self.timer) File "<timeit-src>", line 11, in inner for i in iter(datalist): TypeError: 'pysistence.persistent_list.PList' object is not iterable
Is there a way to define the __iter__ method in Python, or am I going to have to do that in C?