[IronPython] mapping C# iterators to Python iterator
amit
regmi.amit at gmail.com
Tue Dec 4 01:05:43 CET 2007
sorry for the bad indentation
this should be more readable.
class Dummy(object):
def __init__(self, iterObj):
self.iterObj = iterObj
self.index = 0
def next(self):
temp = self.index
if self.index == self.iterObj.Count:
raise StopIteration
self.index = self.index + 1
return self.iterObj.__getitem__(temp)
class CliClassWrapper(object): # this is the class wrapper for
on-the-fly class generation
__slots__ = ('__cliobj__',)
def __iter__(self):
return Dummy(self) # this is where I pass
the object
- Regmee
amit wrote:
> thanks tonnes Dino.
> :)
>
> I did as you said and got it working for ArrayList class.
> Now I am struggling with another issue
> the problem is in the below code wherein I could return ArrayList
> values with __getitem__
> For other classes say 'Stack' though it wont work because it wont have
> __getitem__
>
> I think I am missing something here. May be some sort of method
> invocation to GetEnumerator(), MoveNext(), Current() could help.
>
> class Dummy(object):
> def __init__(self, iterObj):
> self.iterObj = iterObj
> self.index = 0
>
> def next(self):
> temp = self.index
> if self.index == self.iterObj.Count:
> raise StopIteration
> self.index = self.index + 1
> return self.iterObj.__getitem__(temp)
>
>
> class CliClassWrapper(object): # this is the class wrapper for
> on-the-fly class generation
> __slots__ = ('__cliobj__',)
>
> def __iter__(self):
> return Dummy(self) # this is where I pass
> the object
>
>
> - Regmee
>
>
> Dino Viehland wrote:
>> To map these to .NET's IEnumerator/IEnumerable you just need to
>> define __iter__ or __getitem__. If you define __iter__ you should
>> return something that is enumerable (implements IEnumerable or has a
>> next method which we'll call until it throws to stop enumeration).
>> If you define __getitem__ we'll try and index from 0 to infinity and
>> stop at an index out of range or stop iteration exception.
>>
>> You explicitly mention "say for ArrayList object" and I'm not sure
>> what that means - we won't convert an arbitrary enumerable into
>> another type such as ArrayList. But we will convert it one of the
>> enumeration interfaces. When we pass your object out it'll be
>> wrapped in one of our
>> PythonEnumerable/PythonEnumerator/ItemEnumerable/ItemEnumerator classes.
>>
>> -----Original Message-----
>> From: users-bounces at lists.ironpython.com
>> [mailto:users-bounces at lists.ironpython.com] On Behalf Of amit
>> Sent: Saturday, December 01, 2007 4:15 PM
>> To: users at lists.ironpython.com
>> Subject: [IronPython] mapping C# iterators to Python iterator
>>
>> Hi,
>>
>> I want to know how the "Iterators" in C# can be mapped to those in
>> Python.
>> What I tried was:
>>
>> say for ArrayList object
>>
>> def __iter__(self):
>> self.index = self.Count
>> return self
>>
>> def next(self):
>> if self.index == 0:
>> raise StopIteration
>> self.index = self.index - 1
>> return ??
>>
>> If I am creating python classes dynamically how would I map
>> GetEnumerator() , MoveNext() , Current() , Reset()
>> to python Class so as to make it iterable inside python.
>>
>> --Regmee
>>
>>
>> _______________________________________________
>> Users mailing list
>> Users at lists.ironpython.com
>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>> _______________________________________________
>> Users mailing list
>> Users at lists.ironpython.com
>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>
>>
>
>
More information about the Ironpython-users
mailing list