Python iteration over non-sequence

Python iteration over non-sequence

You are trying to iterate over the object itself, which is returning the error. You want to iterate over the list inside the object, in this case Notes.notes (which is somewhat confusing naming, you may want to distinguish the internal list by using another name for the instance of the notebook object).

for note in Notes.notes:
    print(note.memo)

Notes is an instance of NoteBook. To iterate over such an object, it needs an __iter__ method:

class NoteBook:

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

PS. It is a PEP8 recommendation/convention in Python to use lowercase variable names for instances of classes, and CamelCase for class names.
Following this convention will help you instantly recognize your class instances from your classes.

If you wish to follow this convention (and endear yourself to others who like this convention), change Notes to notes.

Python iteration over non-sequence

If you wanted to actually iterate Notes itself, you could also add a custom __iter__ method to it that returns the .notes property.

class Notebook:

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

    ...

Leave a Reply

Your email address will not be published. Required fields are marked *