2011-01-01 4 views
6

Это очень простой вопрос о ООП (я использую python, но на самом деле это концептуальный вопрос, а не конкретный язык). Я огляделся, но ни один учебник или книги не охватывают этот конкретный вопрос. Если я неясен, я приношу свои извинения и буду рад прояснить все, что я написал.Концептуальный вопрос начинающего пользователя о ООП и постоянстве

Предположим, я создаю простую адресную книгу, которую я хочу записать на диск, используя pickle. У меня есть класс под названием Contact, где __init__ берет в некоторых args (firstName и lastName), и у меня есть меню, в котором вы можете создавать контакты, редактировать их и т. Д. Для всех примеров ООП я видел, что они будут делать что-то вроде ...

bob = Contact('Bob', 'Smith') 
jane = Contact('Jane', 'Smith') 

... для создания новых экземпляров контакта. Но все они определены до выполнения. Что происходит, когда я хочу, чтобы все эти экземпляры были созданы «на лету» пользователем? Создать новые экземпляры для каждого человека? Как я могу это сделать с пользовательского ввода? Затем просто напишите все экземпляры списка и соберите его? Или вы делаете что-то вроде ...

firstName, lastName = raw_input("Enter first name: "), raw_input("Enter last name: ")  
contact = Contact(firstName, lastName) 

... затем просто добавить контакт в список и получить новые значения для экземпляра контакта каждый раз, когда я хочу, чтобы добавить пользователя? Это ключевая концепция, которую я действительно не получаю (потому что я нигде не видел ее объяснения). Все примеры, которые я видел, не делают выше, а вместо этого создают новые экземпляры для каждой вещи/человека, но все они заранее определены и не созданы «на лету». Я был бы очень благодарен за то, что кто-то объяснит мне эту концепцию.

ответ

1

Да, это обычно, как вы это делаете - создавайте массивы ваших объектов. Или некоторые другие коллекции, в зависимости от вашего языка и/или рамки. При создании нового объекта вы сначала создаете его во временной переменной, а затем вставляете в свою коллекцию.

Иногда, когда у вас много объектов, вы не загружаете их все сразу из своего постоянного хранилища (например, БД или файл). Вы просто загружаете тот (или несколько), с которым вам нужно работать. Если вы загружаете только одну, она может получить специальную переменную. Несколько человек снова получат коллекцию.

+0

В любом случае, чтобы вводимые данные были именем экземпляра? Или это совершенно не важно? Или даже возможно? Я думаю о чем-то вроде ... firstName = raw_input («Ваше имя?») lastName = raw_input («Какова ваша фамилия ?:») eval (firstName) = Contact (firstName, lastName) – johnharris85

+1

@JHarris - это зависит от языка. PHP и Javascript могли бы это сделать. C++/C# не смог. Однако я не думаю, что это правильный способ думать. Если вы хотите посмотреть контакты по имени, используйте тип «словарь» («карта» на некоторых языках). Загрязнение пространства имен переменными для каждого такого контакта было бы расточительным и даже совершенно опасным (что, если кто-то создает контакт с первым именем, как одна из ваших переменных?) –

Смежные вопросы