Fabbrica per matrici di oggetti in python

0

Ok, il titolo potrebbe essere un po 'fuorviante.

Ho una classe Window che disegna i widget al suo interno nel costruttore. I widget sono tutti dello stesso tipo.

Quindi passo un elenco di dizionari, che contengono i parametri per ciascun widget. Funziona abbastanza bene, ma sono preoccupato che l'interfaccia per i chiamanti sia offuscata.

Cioè, per usare Window , si deve studiare la classe, costruire un elenco corretto di dizionari e quindi chiamare il costruttore con un solo parametro - widgets_params.

Questo design è buono o cattivo? Quali alternative fornisce la sintassi python?

    
posta Vorac 31.08.2013 - 08:50
fonte

2 risposte

1

La risposta dipende in parte esattamente da cosa fa la tua classe Widget. Il numero di widget figli è stato corretto o può esserci un numero variabile di widget figlio in base all'input? Inoltre, una volta creato, il chiamante ha bisogno di accedere direttamente a questi widget figlio?

Ad esempio, supponiamo che il numero di bambini sia dinamico e basato sul numero di parametri di input. Potresti rendere la creazione del genitore e dei figli come passi separati. Quindi, invece di Widget([list of widget parameters...]) dovresti fare:

app = Widget()
app.addChild(label="Name:", color="red")
app.addChild(label="Phone:", color="green")
...

Se i widget figli sono oggetti di prima classe, un'altra soluzione sarebbe di crearli per primi e passarli alla classe genitore. Ad esempio:

child1 = ChildWidget(label="Name:", color="red")
child2 = ChildWidget(label="Phone:", color="green")
app = Widget(child1, child2)

Quale è meglio dipende un po 'dalla natura dei widget figli. Se il chiamante ha bisogno di controllo completo, penso che il secondo metodo sia migliore: il chiamante ha un controllo preciso sui widget per bambini.

Se, al contrario, il chiamante non dovrebbe avere il controllo completo e invece dovrebbe solo essere consentito di impostare alcuni attributi, la prima soluzione potrebbe avere più senso.

    
risposta data 21.11.2013 - 22:59
fonte
0

Non so quali sono i parametri del tuo widget, ma perché non una classe Widget? Quindi, è possibile controllare i parametri all'interno del costruttore Widget e denominare i parametri:

class Widget:
    def __init__(self, x0, y0, x1, y1): # Given these are the parameters
        ... stuff including possibly some check

w = Window()
w.draw([Widget(x0=12,y0=20,x1=10,y1=20), Widget(x0=...,y0=...)]) 

Mi fermo qui, ma vedi l'idea

    
risposta data 22.09.2013 - 21:50
fonte

Leggi altre domande sui tag