在Python中针对一个项目存储属性列表的更好方法是什么?

时间:2013-01-22 18:22:20

标签: python class object data-structures

我正在生成一个连接到服务器的计算机列表。对于每台计算机,我收集了一个属性列表。我是Python和编程的新手,我发现我的解决方案相当笨重。

我是用列表做的。我有一个主列表:computer_list,每台计算机都是另一个列表,其中包含状态,日期,配置文件等属性。

computer_list = [cname1, cname2, cname3]
cname1 = ['online', '1/1/2012', 'desktop']

这种方法的缺点是越来越明显我工作和改变这个程序。我希望有更直观的东西。我查看了词典,但这个解决方案看起来和我的一样复杂。一旦开始迭代和分配,列表中的列表是可行的但不可读。我相信有更好的方法。

2 个答案:

答案 0 :(得分:4)

创建一个Computer对象来存储描述计算机属性和状态的字段是一种可行的方法。

您应该阅读更多关于课程的内容,但下面的内容应该符合您的需求:

class Computer(object):
    def __init__(self, status, date, name):
        self.status = status
        self.date = date
        self.hostname = name

    # (useful methods go here)

也许你初始化Computer个对象并将它们存储在如下列表中:

comp1 = Computer("online", "1/1/2012", "desktop")
comp2 = Computer("offline", "10/13/2012", "laptop")

computers = [comp1, comp2]

答案 1 :(得分:2)

让每台计算机成为一个对象:

class Computer(object):
    def __init__(self, name, status, date, kind):
        self.name   = name
        self.status = status
        self.date   = date
        self.kind   = kind

    @classmethod    # convenience method for not repeating the name
    def new_to_dict(cls, name, status, date, kind, dictionary):
        dictionary[name] = cls(name, status, date, kind)

然后将它们存储在字典或列表中。

computer_list = []
computer_list.append(Computer("rainier", "online", "1/1/2012", "desktop"))

computer_dict = {}
Computer.new_to_dict("baker", "online", "1/1/2012", "laptop", computer_dict)

现在当你迭代它们时,它很简单:

for comp in computer_list:
    print comp.name, comp.status, comp.date, comp.kind

您还可以在班级上定义__str__()以定义它们的显示方式,依此类推。