Aggiunta di nuove funzionalità a tutte le sottoclassi shelve.Shelf in Python

1

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à:

  1. Non è necessario avvolgere tutte le funzioni fornite da shelve , come in: Shelf
  2. Non si interromperà se Python aggiunge nuovi metodi a def keys(self): return self._shelf.keys() o nuove sottoclassi di Shelf
  3. 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 in Shelf.__set__ . Per me definire un nuovo Shelf.__set__ = my_func come @Winston offre esiti moderatamente fragili - lo prendo per questo lo suggerisce solo con esitazione

Meno importante ma ancora desiderabile sarebbe:

  1. 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)
posta kuzzooroo 07.07.2014 - 23:35
fonte

1 risposta

1

Non sottoclasse shelve.Self , invece definisci una nuova classe con un costruttore che chiama shelve.open . Implementare il metodo di interesse chiamando i metodi effettivi sull'oggetto shelf restituito.

    
risposta data 08.07.2014 - 00:58
fonte