Python shelve class rename

1

Il motivo principale per cui utilizzo Shelve è di essere in grado di sviluppare rapidamente il codice senza preoccuparmi della struttura della tabella db. Sfortunatamente la modifica di un nome di classe da, ad esempio, 'class1' a 'class2' restituisce "AttributeError: 'module' object non ha attributo 'class2'" alla prossima esecuzione. Qual è il modo canonico per rinominare una classe Shelved? Quali altre sorprese simili si nascondono più in profondità nella struttura db Shelve?

    
posta Mayavimmer 05.05.2014 - 18:29
fonte

1 risposta

2

Shelve utilizza pickle per serializzare gli oggetti. Pickle carica gli oggetti per nome; il modulo e il nome della classe vengono memorizzati e ricercati durante la deserializzazione.

Il modo più semplice per supportare i nomi "legacy" è semplicemente creare un alias:

class NewName(object):
    # a renamed object, once named OldName


# backwards-compatible names for unpickling
OldName = NewName

Quando si deseleziona, modulename.OldName viene cercato e utilizzato, che è semplicemente la stessa classe di NewName . Quando si memorizza un cambiamento nello shelve, verrà utilizzato il nuovo nome.

    
risposta data 05.05.2014 - 18:32
fonte

Leggi altre domande sui tag