Объявление глобальной переменной Python

У меня есть приведенный ниже фрагмент кода, который создает заметку и добавляет в блокнот.

Мой вопрос больше связан с глобальной переменной last_id. Когда я объявляю его как переменную класса, то есть внутри Class Note, я получаю следующую ошибку, но когда я объявляю вне класса, мой код работает нормально.

Вот мои разъяснения:

  1. Почему он не принимает переменную класса.
  2. Зачем мне определять last_id, когда я объявляю его как глобальную переменную внутри своей функции?

Error:

C:\Python27\Basics\OOP\formytesting>python notebook.py
Traceback (most recent call last):
  File "notebook.py", line 38, in <module>
    firstnote = Note('This is my first memo','example')
  File "notebook.py", line 10, in __init__
    last_id += 1
NameError: global name 'last_id' is not defined

code.py

import datetime
last_id = 0
class Note:

    def __init__(self, memo, tags):
        self.memo = memo
        self.tags = tags
        self.creation_date = datetime.date.today()
        global last_id
        last_id += 1
        self.id = last_id

        #global last_id
        #last_id += 1
        #self.id = last_id

    def __str__(self):
        return 'Memo={0}, Tag={1}, id={2}'.format(self.memo, self.tags,self.id)


class NoteBook:
    def __init__(self):
        self.notes = []

    def add_note(self,memo,tags):
        self.notes.append(Note(memo,tags))

    def __iter__(self):         
        for note in self.notes:             
            yield note 



if __name__ == "__main__":
    firstnote = Note('This is my first memo','example')
    print(firstnote)
    Notes = NoteBook()
    print("Adding a new note object")
    Notes.add_note('Added thru notes','example-1')
    Notes.add_note('Added thru notes','example-2')
    for note in Notes.notes:
        print(note.memo,note.tags)

    for note in Notes:
        print(note)

    print("Adding a new note object----End")    
7
задан Santosh Kumar 9 August 2012 в 02:19
поделиться