有些时候我们也许需要将一些相关的属性集中存储而又不想去创建一个类(可能因为太麻烦或代码的历史原因,确切的说这个时候我们需要的是一个C/C++中的结构),这个时候我们可以用Python的字典(dictionary)和深拷贝(deepcopy)结合使用来解决这个问题,以下是我遇到的问题:在我修改一个用Python实现类似Linux的crontab的小应用里,需要把一个任务的信息传给一个处理函数中,每个任务有十几个属性,而我有不希望在我函数的列表中有十几个参数,怎么办呢?
我声明了一个字典模板:
Task = {
"min" : "",
"hou" : "",
"day" : "",
"mon" : "",
"week" : "",
"table" : "",
"filename" : "",
"filetype" : "",
"script" : "",
"rsyncfile" : "",
"interflag" : -1,
"interval" : -1,
"modtime" : -1,
"doing" : -1,
"url" : ""
}
在我需要一个实例的时候我用如下的代码来创建:
t = copy.deepcopy(Task)
t["min"] = lineArr[0]
t["hou"] = lineArr[1]
t["day"] = lineArr[2]
t["mon"] = lineArr[3]
t["week"] = lineArr[4]
t["table"] = lineArr[5]
t["filename"] = lineArr[6]
t["filetype"] = lineArr[7]
t["script"] = lineArr[8]
t["rsyncfile"] = lineArr[9]
t["url"] = lineArr[10]
由于Python的赋值是引用赋值(浅拷贝),所以我需要在内存中为新对象开辟一块内存,这样就需要一个模板对它进行深拷贝来得到一个新的对象。其中copy是一个模块deepcopy为copy模块下的一个方法。
至此我没有创建任何类而得到了类似类的功能。