Python Object-Oriented Python Advanced Objects Iterable

daniel steinberg
daniel steinberg
12,753 Points

"Add an __iter__ method to the Letter class so the letter's pattern can be iterated through. "

Below I have commented out the "iter" method and the str method still iterates thru self.pattern. So, what is the purpose of iter?

class Letter: def init(self, pattern=None): self.pattern = pattern def str(self): test=[] for x in self.pattern: if x == ".": test.append("dot") elif x == "_": test.append("dash") return "-".join(test)

# def __iter__(self):
    # yield from self.pattern

class S(Letter): def init(self): pattern = ['','.','', '.', '.'] super().init(pattern)

test = S() print(test) dash-dot-dash-dot-dot

morse.py
class Letter:
    def __init__(self, pattern=None):
        self.pattern = pattern

    def __str__(self):
        output = []
        for blip in self.pattern:
            if blip == '.':
                output.append('dot')
            else:
                output.append('dash')
        return '-'.join(output)


class S(Letter):
    def __init__(self):
         pattern = ['.', '.', '.']
         super().__init__(pattern)

1 Answer

adrian miranda
adrian miranda
11,444 Points

self.pattern is a list. Class list already has its own iterator. You are not adding __iter__ to list.

You are defining an __iter__ on your own class letter.