有关该实施例中,我有一个字典,使得当我请它,“余烬攻击”被显示。

#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,   访问的所有条目也被缓存   在存储器中,和写回上同步()   和close();这可以使它更加便利   突变的可变项   持续的字典,但是,如果许多   条目访问,它可以消耗   海量的内存缓存,   它可以使关闭操作   因为所有访问的条目很慢   写回(有没有办法   确定哪些访问的条目是   可变的,也没有哪一个实际上是   突变的)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top