在Python中,有什么更好的方法来存储一个项目的属性列表?

3 投票
2 回答
529 浏览
提问于 2025-04-17 13:22

我正在生成一个连接到服务器的电脑列表。对于每台电脑,我会收集一些属性信息。因为我刚开始学Python和编程,所以觉得我的解决方案有点笨拙。

我之前是用列表来做的。我有一个主列表:computer_list,每台电脑又是一个列表,里面包含状态、日期、配置等属性。

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

随着我不断修改这个程序,这种方法的缺点越来越明显。我希望能找到一种更直观的方式。我查了一下字典,但那个解决方案似乎也和我现在的差不多复杂。列表里面再放列表虽然能用,但一旦开始遍历和赋值,就变得不太容易理解。我相信一定有更好的方法。

2 个回答

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]
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__(),来设置它们的显示方式等等。

撰写回答