Я учу себя Python (2.7, нет опыта программирования), и я только начал изучать классы и концепции ООП. В качестве упражнения я пытаюсь написать очень простую адресную книгу. Я думаю, что мне удалось понять основы классов и экземпляров, но мне трудно понять, как дальше развивать уровень абстракции в данный момент.
Попытка объяснить лучше, скажем, у меня есть это, которое часто является базовым примером, который многие учебные пособия используют для введения классов:
class Contact(object):
def __init__(self, name, surname, phone):
self.name = name
self.surname = surname
self.phone = phone
contact1 = Contact('Mark', 'Doe', '123456789')
contact2 = Contact('Sally', 'Preston', '456789123')
Пока все хорошо, я могу сделать много других интересных вещей, используя contact1.attribute или другие методы. Здесь нет проблем.
Что мне трудно понять, так это:
Вопрос 1:
Я не знаю, сколько у меня будет контактов. Как мне создать метод, скажем, create_contact (), который заставляет меня создать новый контакт и сохранить его в списке / dict, если я не знаю, сколько у меня будет? Как я это называю? Я не могу понять, как сделать так, чтобы я мог создать новый экземпляр без жесткого кодирования его имени, такого как "contact1" и т. Д. Как сделать строку с "contact1" и "contact2" динамической вещь
Я попытался решить проблему, используя список в качестве переменной класса. Что-то вроде (при условии, что "contact_list" уже существует как переменная класса):
Contact.contact_list.append(Contact('Mark', 'Doe','123456789')) # obviously I'd use raw_input instead of 'Mark' etc, but I avoided it here for readability
Но я получаю список безымянных объектов, и моему мозгу трудно с этим справиться. Я могу получить к ним доступ с помощью индексов списков, но я не уверен, что нахожусь на правильном пути ... любая помощь будет наиболее ценной.
Вопрос 2: (несколько связанный, чтобы лучше понять проблему)
если в CLI Python я добавлю что-то вроде (при условии, что предыдущий блок, определяющий класс, уже был запущен):
>>> Contact('Bob', 'Stevens', '32165497')
Насколько я понимаю, экземпляр Contact () действительно создается с этими атрибутами ... но у него нет имени. Как мне получить к нему доступ? (Как я узнаю, что он существует? Есть ли способ перечислить все существующие экземпляры, относящиеся к определенному классу?)
Надеюсь, я понял. Заранее благодарим за любую помощь.