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_func
come @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)