Initialisation erronée d'un tableau dans une class
Résoluyg_be Messages postés 22821 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 mai 2024 - 7 août 2023 à 13:10
- Initialisation erronée d'un tableau dans une class
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
- Le fichier contient un tableau présentant un extrait des livres les plus prêtés à paris en 2016. filtrez le tableau pour ne faire apparaître que les bandes dessinées ado. puis filtrez le tableau pour ne faire apparaître que celles dont l'auteur est zep. quel est le titre de la bande dessinée ado de zep qui a été la plus prêtée d'après ce tableau ? ✓ - Forum Windows 10
3 réponses
Si tu nous expliquais ce que tu veux faire?
Tu n'as pas de fonction d'instantiation de la classe (__init__)
Tu te refères toujours à la même instance de tab pour chaque valeur de a
c'est donc normal de retrouver les mêmes valeurs
Bonjour,
merci pour ton aide, je pensais qu'__init__ n'était pas nécessaire... à tort
je joins le correctif ci dessous :
class tests(): def __init__(self): self.tab = [] def addTest(self, valeur): self.tab.append(valeur) a = [] for i in range(0, 9): a.append(tests()) for j in range(0, 9): a[i].addTest(str(i) + '-' + str(j)) for i in range(0, 9): for j in range(0, 9): print(i, j, a[i].tab[j])
Modifié le 22 août 2023 à 15:33
Le init n'est pas nécessaire. Ce qui est nécessaire, c'est d'associer chaque tableau à une instance de la classe.
class tests(): pass a = [] for i in range(0, 9): a.append(tests()) a[i].tab = [] for j in range(0, 9): a[i].tab.append(str(i) + '-' + str(j)) for i in range(0, 9): for j in range(0, 9): print(i, j, a[i].tab[j])
Merci pour ton explication.
Je pensais que l'instanciation de la classe était suffisante pour permettre la modification de toutes les attributs de cette classe.
Et ton exemple est plus simple ;-)
7 août 2023 à 13:06
Tu pensais juste.
Tu avais, surtout, négligé de créer plusieurs tableaux.
De plus, tu utilisais le même nom (tab) pour un attribut de la classe et pour un attribut des instances de la classe, ce qui est source de confusion.
Ici, un exemple avec deux noms différents, et une création de tableau pour chaque instance, en ligne 6.
class tests(): tabcl=['','','','','','','','',''] a=[] for i in range(0,9): a.append(tests()) a[i].tab=tests.tabcl.copy() for j in range(0,9): a[i].tab[j]=(str(i)+'-'+str(j)) for i in range(0,9): for j in range(0,9): print(i,j,a[i].tab[j])
7 août 2023 à 13:10
Un exemple de confusion en utilisant le même nom de variable pour un attribut d'une classe et pour un attribut d'instances de la classe:
class testc: cl = 123 print ("testc.cl",testc.cl) testc.cl=421 print("testc.cl=421") print("testc.cl",testc.cl) a=testc() print("a=testc()") print ("testc.cl,a.cl",testc.cl,a.cl) a.cl=2222 print("a.cl=2222") print ("testc.cl,a.cl",testc.cl,a.cl) testc.cl=3333 print("testc.cl=3333") print ("testc.cl,a.cl",testc.cl,a.cl) b=testc() print("b=testc()") print ("testc.cl,b.cl",testc.cl,b.cl)