Ho visto (e usato una volta) questo idioma alcune volte in Python:
# At the end of a module:
if __name__ == '__main__':
main() # or whatever your entry point looks like, this line isn't important
else:
sys.modules[__name__] = SomeClass()
Di solito, SomeClass
implementerà uno o più metodi magici, per consentire un codice come questo:
import mod
with mod:
pass
foo = mod[bar]
mod()
# etc.
Nel mio caso specifico, il modulo in precedenza aveva funzionato molto simile a una mappatura immutabile (con una funzione di primo livello lookup()
di un argomento), e volevo fornirgli una sintassi standard per l'iterazione, la ricerca di chiavi, ecc. Ho ritenuto che fosse più sensato che scrivere diverse funzioni di alto livello che implementassero tutte le stesse funzionalità di una mappatura ma con nomi meno familiari.
Suppongo che la mia domanda sia se questo è un modello o un antipattern. Gli stessi singleton sono spesso di cattivo design, ma se utilizzerai comunque un modulo-come-singleton, è un buon modo per implementarlo?