使用Python编写类词典

使用Python编写类词典,python,dictionary,shelve,Python,Dictionary,Shelve,对于这个例子,我有一个字典,当我调用它时,会显示“余烬攻击” #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=

对于这个例子,我有一个字典,当我调用它时,会显示“余烬攻击”

#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做成了一本搁置的字典,而不是一本普通的字典。它可能与内存范围或其他有关。不管怎样,有人能帮我修改我的代码,这样它就可以在书架上使用了吗?谢谢

dict1=shelve.open("shelve.dat", writeback=True)
您还可以指定应该提高性能的协议

dict1=shelve.open("shelve.dat", protocol=2, writeback=True)
由于Python语义的缘故,一个工具架 不知道什么时候是可变的 持久性字典条目不可用 被改进的。默认情况下,修改的对象 仅当指定给 搁板(参见示例)。如果可选 写回参数设置为True, 所有访问的条目也被缓存 在内存中,并在sync()上写回 并关闭();这可以使它更方便 在 持久字典,但是,如果很多 访问条目时,它可以使用 大量的内存用于缓存, 它可以进行闭合操作 由于访问了所有条目,因此速度非常慢 都写回来了(没有办法 确定要访问的条目 可变的,也不知道哪些是实际的 变异)


“工作”是什么意思?您能否提供一些提示,说明您希望看到发生什么和没有发生什么?使用sheels方法,我希望能够调用dict1[“Charmander”].var1并返回“余烬攻击”。现在执行此操作时,只返回一个空的
[]