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.