2013-04-22 2 views
-1

Я пытаюсь создать программу Python, которая создает класс, который может хранить информацию и выполнять операции с контактными объектами. В принципе, это похоже на мобильный телефон, в который вы можете ввести данные для имени, адреса, телефона, возраста и типа (например, Family, Work, Friends и т. Д.). Я довольно новичок в Python, и я не слишком знаком с классами. .Создание списка объектов класса

я придумал что-то вроде

CONTACTS = open ("contacts.txt","r") 

CONTACT_DATA = CONTACTS.read() 

class Contacts(CONTACT_DATA): 

     def __init__(CONTACT_DATA, Name= "Unavailable", Address= "Unavailable", Phone="Unavailable", Age=0, Type=None): 
      CONTACT_DATA.Name = Name 
      CONTACT_DATA.Address = Address 
      CONTACT_DATA.Phone = Phone 
      CONTACT_DATA.Age = Age 
      CONTACT_DATA.Type = Type 

, но я довольно много застрял на том, чтобы назначить строки переменным. Я знаю, что предполагается использовать «набор» и «получить» методы ...

файл Contacts.txt будет выглядеть как

3 
Albert Einstein 
27 Technology Drive 
25 
555-555-1212 
WORK 
Sally Field 
48 Friendly Street 
22 
555-555-8484 
FRIEND 
Marvin Gaye 
191 Apple Mountain Road 
30 
555-555-2222 
RELATIVE 

3 является количество контактов.

Спасибо!

+0

Я не думаю, что вы можете подкласса _an экземпляра 'str'_. Базовый класс должен быть классом ... _IMHO_ для этого вам не нужны классы. –

+0

Я бы порекомендовал вам поиграть только с помощью классов (как их создать, использовать их и т. Д.), Просто используя код, который вручную создает объект «Контакт». Например, 'c = Contact (name = 'Name', address = 'Address')', а затем распечатать данные на экране, пока вам не станет удобно, что вы делаете с классами. Как только вам будет удобно здесь, попробуйте выполнить чтение файла обратно в свой код. –

ответ

0

Что вы работаете с может быть выполнимо, но больше, как это:

class Contact(object): 
    def __init__(self, name, address, age, phone, ctype): 
    self.name = name, 
    self.address = address 
    self.age = age 
    self.phone = phone 
    self.ctype = ctype 

# Read off the first line of your data file. 
fh = open('contacts.txt') 
count = int(fh.readline()) 

Contacts = [Contact(*c) for c in [[next(fh) for i in range(5)] for j in range(count)]] 

Как уже отмечалось, в последней строке действительно использует несколько вложенных списковых. Это эквивалентно этому:

Contacts = [] 
for j in range(count): 
    fields = [] 
    for i in range(5): 
    fields.append(next(fh)) 
    Contacts.append(Contact(*fields)) 
+1

«довольно новый для Python» - последняя строка состоит из [list comprehensions] (http://docs.python.org/2/tutorial/datastructures.html#list-comprehensions) – Aprillion

+1

В качестве побочного примечания: есть лучший текст форматы, такие как csv или json (оба поддерживаются стандартной библиотекой lib). –

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