3

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

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

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

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

4

2 回答 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]
于 2013-01-22T18:26:56.043 回答
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__()在类上定义以定义它们的显示方式,等等。

于 2013-01-22T18:29:55.453 回答