Ci sono diverse opzioni qui per affrontare la situazione: 
 Supponiamo di avere un prodotto con i seguenti attributi: 
-  nome 
-  Descrizione 
-  id 
-  color 
-  size 
-  di peso 
-  prezzo 
-  categorie 
-  brand_id 
-  Codice 
  0)  impostandoli tramite gli argomenti del costruttore 
 Indipendentemente da ciò che si potrebbe dire sul numero di argomenti per un costruttore, qui il caso è chiaro: abbiamo un oggetto dati con i suoi attributi e dobbiamo affrontarlo. Quindi usare 10 argomenti in un costruttore è assolutamente soddisfacente. 
  1)  alcune lingue consentono oltre ai tipici  parametri posizionali   parametri denominati . Quindi in Python, potresti scrivere   Product(name="A shirt", color="red" ...)    che si traduce in un costruttore leggibile. E con indentazione non sembra troppo travolgente: 
Product(name="A shirt",
        description="A cool shirt",
        id=1,
        color="red",
        size="XXL",
        weight=200,
        price="1000",
        categories=["shirt","clothes", "male"],
        brand_id="0987654321",
        sku="1234567890"
)
  2)  Uso di   Dictionary    /   Associative array    /   HashMap    
 Si prelavella un dizionario con coppie chiave-valore come   product["name"]="A shirt"    e quando si inizializza l'istanza, si passa il dizionario al costruttore. Quindi è chiaro come viene impostato ciascun attributo. Il problema di  ottenere gli argomenti posizionali nell'ordine corretto  viene aggirato. 
 Possibile svantaggio: 
 Quando al tuo dizionario mancano informazioni importanti, l'errore verrà generato durante il runtime, che potrebbe essere tardivo. Se stai usando un linguaggio tipizzato staticamente, questo tipo di errore potrebbe essere omesso, se hai usato il sistema di tipi invece del costrutto del dizionario debole. 
  3)  utilizzando un'interfaccia  fluente  insieme a  modello di builder  
 Riceverai qualcosa del tipo: 
Product(sku)
   .name("A Name")
   .description("Desc")
   ... 
   .build();
 Specialmente, quando non tutti gli attributi sono necessari al momento della creazione, potresti avere gli attributi necessari impostati tramite gli argomenti del costruttore e quelli opzionali tramite interfacce fluenti. 
  4)  A volte è possibile avere gruppi semantici: 
 Supponiamo che tu stia memorizzando i dati dei clienti, potresti avere una sottoclasse   address   , che verrebbe incapsulata (   street   ,   zip   ,   city   ) o   contactinformation    (   phone   ,   mail   ) che aiutano spezzando il costruttore a parte:   Person(firstname, lastname, address, contactinformation)    è più leggibile di   Person(firstname, lastname, street, zip, city, phone, mail)    e a causa di parametri minori, anche se si è vincolati a parametri posizionali più facile ottenere l'ordine giusto. 
 Ma con attributi di prodotto come sopra, devo ammettere che è difficile trovare un gruppo. 
 Ai tuoi punti: 
  In this case, do you prefer to define all string attributes one by one in one under another format or a string array with seven elements ?
 Preferisco avere nomi significativi per i parametri. Oltre a ottenere la posizione sbagliata, non sai nemmeno quale posizione nell'array è cosa. 
  I think taking 10 different attributes with constructor and assigning them into the attributes one by one seem very bad
 Non di per sé. Ma se ci sono altre possibilità, potresti volerle usare. 
  we can perform assign operation with only one for loop, which seems more readable.
 Dal punto di vista di "cosa sta succedendo" non si ha troppa ridondanza in corso e il codice risultante potrebbe essere più breve. Concordato. Ma come ho detto, se qualcuno (o forse tu in un anno) ha a che fare con questo codice, si deve investire del tempo per colmare le lacune. E più il tuo codice è ridondante, meno devi compilare, più è facile, lavorare con questo codice.