在Python中,有什么更好的方法来存储一个项目的属性列表?
我正在生成一个连接到服务器的电脑列表。对于每台电脑,我会收集一些属性信息。因为我刚开始学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__()
,来设置它们的显示方式等等。