我正在生成一个连接到服务器的计算机列表。对于每台计算机,我收集了一个属性列表。我是Python和编程的新手,我发现我的解决方案相当笨重。
我是用列表做的。我有一个主列表:computer_list
,每台计算机都是另一个列表,其中包含状态,日期,配置文件等属性。
computer_list = [cname1, cname2, cname3]
cname1 = ['online', '1/1/2012', 'desktop']
这种方法的缺点是越来越明显我工作和改变这个程序。我希望有更直观的东西。我查看了词典,但这个解决方案看起来和我的一样复杂。一旦开始迭代和分配,列表中的列表是可行的但不可读。我相信有更好的方法。
答案 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__()
以定义它们的显示方式,依此类推。