在Python中使用类的字典

时间:2010-08-04 22:42:49

标签: python dictionary shelve

对于这个例子,我有一本字典,当我打电话时,会显示“Ember Attack”。

#import shelve
class Pokemon():
"""Each pokemon's attributes"""

def __init__(self):
    self.id=[]
    self.var1=[]
    self.var2=[]
    self.var3=[]
    self.var4=[]
    self.var5=[]

def __str__(self):
     showList=['id','var1', 'var2', 'var3', 'var4', 'var5']

#dict1=shelve.open("shelve.dat")
dict1={}
dict1["Charmander"]=Pokemon()
dict1["Charmander"].var1="Ember Attack"
#dict1.sync()
print dict1["Charmander"].var1
#dict1.close()

然而,当我开始使用书架而不是字典时,当我调用var1时,我得到一个空白。

import shelve

class Pokemon():
"""Each patient's attributes"""

def __init__(self):
    self.id=[]
    self.var1=[]
    self.var2=[]
    self.var3=[]
    self.var4=[]
    self.var5=[]

def __str__(self):
    showList=['id','var1', 'var2', 'var3', 'var4', 'var5']

dict1=shelve.open("shelve.dat")
#dict1={}

dict1["Charmander"]=Pokemon()
dict1["Charmander"].var1="Ember Attack"

dict1.sync()

print dict1["Charmander"].var1

dict1.close()

唯一的区别是我把dict1变成了一个搁置字典,而不是一个普通的字典。它可能与内存范围有关。无论如何,有人可以帮我修改我的代码,以便它可以与货架一起使用吗?谢谢!

1 个答案:

答案 0 :(得分:1)

dict1=shelve.open("shelve.dat", writeback=True)

您还可以指定应该提高性能的协议

dict1=shelve.open("shelve.dat", protocol=2, writeback=True)
  

由于Python语义,一个架子   无法知道何时变异   持久字典条目是   改性。默认情况下修改对象   仅在分配给时写入   货架(见例)。如果是可选的   writeback参数设置为True,   访问的所有条目也都被缓存   在内存中,并写回同步()   并关闭();这可以使它更方便   改变中的可变条目   持久字典,但是,如果很多   条目被访问,它可以消耗   缓存的大量内存,   它可以进行近距离操作   因为所有访问的条目都很慢   写回来(没有办法   确定哪些访问的条目   可变的,实际上也不是   突变)。