Invece che scrivere interminabili e poco leggibili catene di if/elif/else è possibile risolvere elegantemente la cosa con un dizionario.
Ecco un esempio:
switch = {
'vigenere': Key(parameters),
'des': DESWrapper(password),
'3des': TripleDESWrapper(password)
}
if crypto_type in switch:
self.crypto = switch[crypto_type]
else:
pass
In questo esempio la funzione imposta l'oggetto self.crypto basandosi su una stringa di input crypto_type, che può assumere i seguenti valori:- vigenere
- des
- 3des
(come potete immaginare è un programma di crittografia). Il dizionario inizializza l'oggetto che, a seconda della stringa in input, può diventare di tipo "Key", "DesWrapper" o "TripleDesWrapper", passando al costruttore gli argomenti corretti.
Se la stringa crypto_type è trovata all'interno del dizionario switch l'oggetto viene inizializzato, altrimenti il programma passa oltre.