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

2024-10-03 17:27:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在生成连接到服务器的计算机列表。我收集了每台计算机的属性列表。我对Python和编程不熟悉,发现我的解决方案相当笨拙。你知道吗

我是用单子做的。我有一个主列表:computer_list,每台计算机都是另一个列表,具有诸如状态、日期、配置文件等属性

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

这种方法的缺点是越来越明显,我的工作和改变这个程序。我希望有更直观的东西。我查了字典,但那个解决办法似乎和我的一样复杂。一旦我开始迭代和赋值,列表中的列表是可行的,但不可读。我相信有更好的办法。你知道吗


Tags: 服务器列表属性状态配置文件编程计算机解决方案
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__(),以定义它们的显示方式,依此类推。你知道吗

制作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]

相关问题 更多 >