Lavorare su Dizionario delle classi in Python
-
25-09-2019 - |
Domanda
Per questo esempio, ho un dizionario, che quando chiamo su di esso, "Ember Attack" viene visualizzato.
#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()
Tuttavia quando ho iniziare a utilizzare scaffali al posto del dizionario, ho un vuoto quando chiamo il 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()
L'unica differenza è che ho fatto dict1 un ripiano dizionario invece di un normale dizionario. Probabilmente ha a che fare con la portata di memoria o qualcosa del genere. In ogni caso, qualcuno può aiutarmi mi rivedo il mio codice in modo che che possa funzionare con scaffali? Grazie!
Soluzione
dict1=shelve.open("shelve.dat", writeback=True)
è possibile anche specificare il protocollo che dovrebbe migliorare le prestazioni
dict1=shelve.open("shelve.dat", protocol=2, writeback=True)
A causa della semantica Python, uno scaffale non può sapere quando un mutabile ingresso persistente-dizionario è modificata. Con oggetti predefiniti modificati sono scritti solo quando assegnato alla scaffale (vedi esempio). Se l'optional parametro di ripresa di valore è impostato su True, tutte le voci consultati vengono memorizzati nella cache anche nella memoria, e scritto di nuovo in sync () e vicino (); questo può rendere più maneggevole di mutare le voci mutevoli nel dizionario persistente, ma, se molti le voci sono accessibili, si può consumare grandi quantità di memoria per la cache, e può rendere l'operazione di chiusura molto lento dal momento che tutte le voci a cui si accede sono scritti indietro (non v'è alcun modo per determinare quali voci sono accessibili mutevoli, né quali erano effettivamente mutato).