Per evitare l'overhead associato al modulo shelve % s co_de Opzione% Sono interessato a mettere insieme una classe shelf che accetta solo valori hasable, con hashability come proxy di immutabilità. Quindi mi piacerebbe sottoclasse writeback e sovrascrivi il metodo shelve.Shelf . Il problema è che __set__ può restituire uno di un certo numero di classi diverse (ad esempio shelve.open ) e vorrei che il mio codice consentisse a Dbfilenameshelf questa flessibilità.
Idealmente una soluzione avrebbe le seguenti proprietà:
- Non è necessario avvolgere tutte le funzioni fornite da
shelve, come in:Shelf - Non si interromperà se Python aggiunge nuovi metodi a
def keys(self): return self._shelf.keys()o nuove sottoclassi diShelf - Evitare la fragilità, con cui intendo fare qualcosa di complicato che potrebbe facilmente far inciampare qualcuno (presumibilmente me) che sta modificando o utilizzando il codice mesi o anni lungo la strada. Un esempio in questo contesto sarebbe riassegnare
Shelf, come inShelf.__set__. Per me definire un nuovoShelf.__set__ = my_funccome @Winston offre esiti moderatamente fragili - lo prendo per questo lo suggerisce solo con esitazione
Meno importante ma ancora desiderabile sarebbe:
- Coerente con i principi di progettazione orientati agli oggetti. Mi sembra che la nuova classe qui sia un scaffale, non che abbia uno scaffale. E probabilmente non entrambi (non è uno scaffale che contiene un altro scaffale)