Не могу сделать задачу (Python)
Читаю книгу A Byte of Python. На странице 149 дана задача. Сама задача : "Создайте собственную программу «Адресная книга», работающую из командной строки и позволяющую просматривать, добавлять, изменять, удалять или искать контактные данные ваших знакомых. Кроме того, эта информация также должна сохраняться на диске для последующего доступа."
Я решил сделать эту задачу так : Создать класс, при создании объект, объект будет добавляться в словарь.
Код :
class Adress_book():
'''Класс адрессной книгой'''
def __init__(self, name, numberphone):
self.name = name
self.numberphone = numberphone
print('Создан контакт {0} под номером {1}'.format(self.name, self.numberphone))
ab = {self.name : self.numberphone}
print(ab)
def info(self):
print(ab)
contact1 = Adress_book('Michael', '+91049201450')
contact2 = Adress_book('Bella', '+39849220110')
contact1.info()
В консоли мне выходит ошибка :
Traceback (most recent call last):
File "(мой путь)", line 17, in <module>
contact1.info()
File "(мой путь)", line 12, in info
print(ab)
NameError: name 'ab' is not defined. Did you mean: 'abs'?
Не могу понять, почему не выходит так, как я задумывал. Можете помочь, и объяснить в чём проблема
Ответы (1 шт):
У вас ab - это локальная переменная метода __init__(). Соответственно, метод info() ничего о ней не знает. Да она к тому же перестаёт существовать по окончанию работы функции __init__().
Чтобы передавать её между методами класса, сделайте её атрибутом класса, т.е. работайте с self.ab вместо ab.