【问题标题】:Creating list of Class Objects创建类对象列表
【发布时间】:2013-04-22 17:07:54
【问题描述】:

我正在尝试创建一个 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 是联系人的数量。

谢谢!

【问题讨论】:

  • 我认为你不能继承str的实例。基类应该是一个类...恕我直言你根本不需要类。
  • 我建议您通过手动创建“联系人”对象的代码来尝试使用类(如何创建它们、使用它们等)。例如,c = Contact(name='Name', address='Address'),然后将数据打印回屏幕上,直到您对使用类所做的操作感到满意为止。一旦你在这里感到舒服,然后尝试将文件读回到你的代码中。

标签: python list class python-3.x


【解决方案1】:

你正在使用的东西可能是可行的,但更像这样:

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))

【讨论】:

  • "pretty new to Python" - 最后一行包含list comprehensions
  • 附带说明:有更好的文本格式,如 csv 或 json(标准库都支持)。
猜你喜欢
  • 2013-07-01
  • 1970-01-01
  • 2021-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-07
  • 2017-06-26
相关资源
最近更新 更多