cuzic
cuzic

Reputation: 548

How to delegate `__iter__` method in Python

I would like to delegate __iter__ method for an iterable container.

class DelegateIterator:
    def __init__(self, container):
        attribute = "__iter__"
        method = getattr(container, attribute)
        setattr(self, attribute, method)

d = DelegateIterator([1,2,3])
for i in d.__iter__(): # this is successful
    print(i)
for i in d: # raise error
    print(i)

The output is

1
2
3
Traceback (most recent call last):
  File "test.py", line 10, in <module>
    for i in d:
TypeError: 'DelegateIterator' object is not iterable

Please let me know how to delegate __iter__ method.

Upvotes: 2

Views: 168

Answers (1)

orlp
orlp

Reputation: 117771

Why overcomplicate things?

class DelegateIterator:
    def __init__(self, container):
        self.container = container

    def __iter__(self):
        return iter(self.container)

Upvotes: 5

Related Questions