Devo fare molto affidamento sulla conservazione dei riferimenti?

2

Ho un software OOP basato su GUI relativamente grande (in Python) se fossi strongmente dipendente dal mantenere i riferimenti in tutto il programma. Ad esempio definirei una classe Main con alcune opzioni memorizzate come attributo (esempio di codice seguente). In una seconda classe, ad es. OptionFrame I passerebbe il riferimento a quell'oggetto di opzioni memorizzato e lo memorizzerò di nuovo come un attributo. Questo ha il grande vantaggio che se cambio le opzioni memorizzate in OptionFrame verrà cambiato anche in Main. Tuttavia recentemente ho creato l'intero programma scrivendo una funzione che reinizializza le opzioni memorizzate e quindi gli diamo un nuovo riferimento, come reset_options_bad nell'esempio seguente. Pertanto i due oggetti opzione in OptionFrame e Main non erano più connessi e il mio programma non funzionava più.

Questa decisione di progettazione era basata su passaggi di riferimento e su di essi è stata utile una buona idea?

Class OptionFrame:
    def __init__(self,options):
        self.options=options

    def change_options(self):
        self.options['example']=False # This should also change the options in main

class Main:
    def __init__(self):
        self.stored_options = {'example':True}   
        self.option_frame = OptionFrame(self.stored_options)

    def reset_options_bad(self):
        self.stored_options = {'example':True} # This is a bad idea

    def reset_options_good(self):
        self.stored_options.clear()
        self.stored_options.update({'example':True})
        self.stored_options
    
posta Jannick 06.09.2017 - 15:50
fonte

1 risposta

1

Ciò che fondamentalmente hai è una variabile globale sotto mentite spoglie. E tutti i problemi delle variabili globali si applicano. Diventa ancora più divertente quando aggiungi un nuovo riferimento e in effetti aggiungi un'altra variabile globale.

Quindi direi che non è una buona idea.

    
risposta data 06.09.2017 - 16:49
fonte

Leggi altre domande sui tag