istanziare oggetti ciclicamente Python2

Pubblicità

enricovela

Utente Attivo
Messaggi
443
Reazioni
124
Punteggio
45
Non sono espertissimo, per un proggetto che sto seguendo, mi servirebbe poter instanziare ciclamente degli oggetti. Iterando il processo n volte.

E' possibile fare una cosa del genere? Se si cosa devo andare a studiare?

giusto per intederci:

Python:
class Pollo:
    def __init__(self, intero):
         self.intero = intero

     def Stampa(self):
         print(self.intero)
i = 0

casa = [5]

while i < 6:
    casa[i] = Pollo(i)
     i = i +1

casa[2].Stampa()
 
Ultima modifica:
In realtà ciò che vuoi fare è molto semplice, quindi rispondendo alla seconda domanda: dovresti studiarti bene le basi di python e soprattutto i i tipi standard alla voce "Built-in Types" della documentazione ufficiale (magari python3, a meno che tu non abbia esigenze particolari per usare il 2).
Python non ha i vettori, o almeno non come quelli del C. In python abbiamo le liste, che sono quindi di lunghezza variabile.
L'istruzione
Codice:
casa = [5]
crea una lista con un solo elemento che è l'intero di valore 5, e non, come probabilmente ti aspettavi, una lista di lunghezza 5 (il ciclo successivo sarebbe comunque sbagliato perchè itera 6 volte e usciresti dalla lista).
In questi casi ti conviene partire da una lista vuota e quindi con una delle seguenti istruzioni, che sono equivalenti:
Codice:
casa = [ ]
casa = list()
Poi il ciclo diventa una sequenza di "append", che ti suggerisco di fare con un "for in":
Codice:
for i in range(6):
   casa.append(Pollo(i))
in questo caso "range" è una classe che rappresenta una sequenza di interi tra 0 e 5 compresi, per ora puoi ignorare cosa sia di preciso, grosso modo è come scrivere "for i in [0,1,2,3,4,5]" così che ad ogni iterazione del for "i" assume un valore tra 0 e 5 (in ordine crescente in questo caso) e termina dopo l'ultimo elemento.

In definitiva il codice complessivamente è:
Codice:
class Pollo:
    def __init__(self, intero):
        self.intero = intero

    def Stampa(self):
        print(self.intero)

casa = []
for i in range(6):
    casa.append(Pollo(i))

casa[2].Stampa()

La "pythonic way" per popolare quella lista sarebbe invece:
Codice:
casa = [Pollo(i) for i in range(6)]
 
Ultima modifica:
Pubblicità
Pubblicità
Indietro
Top