Ho avuto una lotta interna con il codice "Pythonic" rispetto al codice "ben architettato" (beh, almeno in senso accademico) per un po '. Più tempo trascorro scrivendo codice Python in modo professionale (e diletto in OSS), più mi rendo conto che essere "Pythonic" a volte butta via tutto ciò che hai imparato su "corretto" OOP.
Niente in Python è veramente privato. In quanto tale, non c'è motivo di avere getter e setter. Sì, puoi usare decoratori ( @property
, ecc.), Ma ho trovato poco utile per loro oltre a gonfiare il mio codice (e sono molto usati raramente in qualsiasi codice che io ' ve guardato attraverso).
Per quanto riguarda il controllo dei tipi, mi baso sull'utente del codice per essere abbastanza intelligente da sapere cosa stanno facendo. Se usano un tipo errato, da qualche parte lungo la linea verrà presentato un errore di runtime che dovrebbe essere abbastanza facile da eseguire il debug con pdb (o ovvio con il messaggio di errore). Di nuovo, codice gonfia.
Detto questo, se c'è qualcosa che il codice client dovrebbe essere reso noto al runtime (contenuto basato sui dati, ecc.), userò assert
, che può essere disabilitato in un ambiente non di debug con Python -O flag .
Il "miglior" codice Python può essere facilmente bannato. Meno codice scrivi (o più cancella), più è facile capire il tuo codice. Come una spina senza vergogna per una libreria che ho scritto, ho implementato un client OAuth 2.0 che funziona su tutti i flussi lato server e supporta più provider immediatamente disponibili in 66 LOC . Rispetto ad una delle prime revisioni a ~ 450 LOC, è abbastanza facile da capire;)
Dopotutto Siamo tutti adulti consenzienti .