Python Classes and Design Questions

2

Qual è il modo migliore di progettare una classe per verificare se si verifica un aggiornamento su una proprietà?

Ho un sacco di classi e attualmente sto passando ad una riprogettazione del pacchetto python che ho creato. Essenzialmente quello che faccio è prendere i valori di una descrizione del servizio REST e metterli in una classe insieme alle funzioni che possono operare su quel servizio.

Ho un sacco di domande sul design:

  1. Posso avere un sacco di classi base come: Servizio mappe, Servizio funzioni in cui sono definite le funzioni, ma non le proprietà e creare classi al volo? È possibile o consigliato? Al momento ho tutto definito per ogni tipo di servizio, ma sto cercando di capire se c'è un modo per ridurre il mio codice base.
  2. Devo usare le proprietà get / set per tenere traccia delle modifiche e semplicemente avere una variabile chiamata isChanged default impostata su False e quando una proprietà viene modificata, quindi cambiarla in True, o c'è un altro modo per farlo? Questo si riferisce alla domanda n. 1. Se faccio questo definendo ogni proprietà, allora ho bisogno di un modo diverso per tenere traccia delle modifiche della classe.
  3. Poiché la funzione operativa sui servizi Web, dovrei renderli asincroni e supportare le funzioni di callback? Qualcuno può fornire esempi / linee guida su come progettare correttamente una classe per supportare questo?

Le mie classi ereditano tutto da oggetto, permettendo così l'uso della notazione get / set. Esempio: @property

Grazie per qualsiasi suggerimento che potresti fornire.

    
posta code base 5000 01.07.2015 - 13:04
fonte

1 risposta

1

Potresti creare @property funzioni decorate. Nel setter, ti assicuri di avere qualcosa che chiami tutte le callback predefinite per detta proprietà. Questo è modello di visitatore in realtà.

Quindi, nel codice non testato e incompleto, qualcosa di simile a questo:

@ook.setter
def ook(self, value):
    self._whatever = ook
    for func in self._ook_callbacks:
        func(self_whatever)
    
risposta data 02.07.2015 - 08:59
fonte

Leggi altre domande sui tag