質問

この例では、私はそれを呼び出すとき、「エンバーアタック」が表示されていることを、辞書を持っています。

#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 Aシェルフ辞書を作っていることです。それはおそらくメモリスコープか何かに関係しています。それは棚で動作するようにとにかく、缶誰かの助けが私は私のコードを修正しましたか?ありがとう!

役に立ちましたか?

解決

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

あなたはまた、パフォーマンスを向上させる必要があるプロトコルを指定することができます。

dict1=shelve.open("shelve.dat", protocol=2, writeback=True)
  そのため、Pythonのセマンティクスの

、棚   とき可変知ることができません   永続的な辞書のエントリがあります   修正しました。デフォルトで変更されたオブジェクトにより、   に割り当てられている場合にのみ書かれています   シェルフ(例を参照)。オプションの場合   ライトバックパラメータがTrueに設定され、   アクセスされたすべてのエントリもキャッシュされます   メモリ内に、シンクの上に書き戻し()   そしてクローズ();これはそれを手軽にすることができ   で変更可能なエントリを変異させます   永続的な辞書、しかし、多くの場合   エントリがアクセスされ、それが消費することができます   キャッシュ用のメモリの膨大な量の、   そして、それはクローズ操作を行うことができます   すべてのアクセスエントリ以来、非常に遅いです   (バック書かれている方法はありません   エントリがアクセスされるかを決定   変更可能な、またどれが実際にいました   変異)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top