При записи данных в файл значение не изменяется

Выполняю задание из книги «A Byte of Python» и столкнулась со следующей проблемой.

При изменении данных в файле (в методе change_item) не меняется значение данного ключа. При выводе функции read_book печатается словарь без изменений.

Само задание:

Создайте собственную программу «Адресная книга», работающую из командной строки и позволяющую просматривать, добавлять, изменять, удалять или искать контактные данные ваших знакомых.

Создайте класс для хранения персональных данных. Объекты визитных карточек храните в словаре, в котором имена контактов будут служить ключами.

Для длительного хранения этих объектов на жёстком диске воспользуйтесь модулем pickle.

Для добавления, изменения или удаления контактов применяйте встроенные методы словаря.

Код:

import pickle

addressBook = {}

def read_book():
    with open('addressbook.pkl', 'rb') as book:
        addressBook = pickle.load(book)
        for name, number in addressBook.items():
            print(name, '-', number)

class Person():
    def __init__(self, name, number):
        self.name = name
        self.number = number
        with open('addressbook.pkl', 'wb') as book:
            pickle.dump(addressBook, book)
            addressBook[name] = number
            print('saved')

    def change_item(self, name, number):
        with open ('addressbook.pkl', 'wb') as book:
            pickle.dump(addressBook, book)
            addressBook[name] = number

    def delete_item(self, name):
        with open ('addressbook.pkl', 'rb') as book:
            addressBook = pickle.load(book)
            if name in addressBook:
                del addressBook[name]
                with open('addressbook.pkl', 'wb') as book:
                    pickle.dump(addressBook, book)

    def search(self, name):
        with open ('addressbook.pkl', 'rb') as book:
            addressBook = pickle.load(book)
            for i in addressBook:
                if i == name:
                    print(i, addressBook[i])

Ответы (1 шт):

Автор решения: n1tr0xs

Вы перепутали местами строки в __init__:

    def __init__(self, name, number, addressBook):
        self.name = name
        self.number = number
        with open('addressbook.pkl', 'wb') as book:
            addressBook[name] = number # сначала меняем "записную книжку"
            pickle.dump(addressBook, book) # потом записываем

            print('saved')
→ Ссылка