2013-04-22 207 views
-1

我正在尝试创建一个Python程序,该程序创建一个可以保存信息并使用联系对象执行操作的类。基本上,它就像一个手机,你可以输入姓名,地址,电话,年龄和类型(如家庭,工作,朋友等)的数据。我对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 

,但我几乎停留在如何将字符串赋值给变量。我知道我假设使用“set”和“get”方法......

的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_你根本不需要类。 – 2013-04-22 17:11:52

+0

我建议你只是通过手动创建一个“联系人”对象的代码来使用类来玩游戏(如何创建它们,使用它们等)。例如,'c =联系人(姓名='姓名',地址='地址')',然后将数据重新输出到屏幕上,直到您对使用课程所做的事情感到满意为止。一旦你在这里舒适,然后尝试将文件读入你的代码。 – 2013-04-22 18:28:41

回答

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 2013-04-22 17:29:27

+1

附注:有更好的文字格式如csv或json(均由标准库支持)。 – 2013-04-22 17:42:41