def construit (self,element):
self = Liste_chaine(element, self)
self n'est que variable locale de la fonction construit. Ca crée une liste qui sera déréférencée à la sortie de la fonction... et ça ne sert à rien.
LaurentFOUSSADIER1 a écrit:
Donc toujours recréer un nouvel objet (= nouvelle adresse pour l'objet) avant de reconnecter les morceaux.
c'est parce que vous ne voulez pas de return...
Merci de votre réponse. Je ne crois pas que self soit une variable locale sinon je n'aurais pas obtenu un chaine qui boucle sur elle même après application de la méthode.
Je ne voulais pas de return pour rester dans l'esprit du constructeur des listes chainées qui est une procédure et non une fonction. Mais je reconnais que c'est plus simple avec
Tu veux ajouter au début de ta liste et tu ne veut pas de return ? def construit(self, element): apres = Liste_chaine(valeur=self.valeur, suivant=self.suivant) self.valeur = element self.suivant = apres Ça ne marche pas ?
edit:
J'ai fait un petit test quick and dirty ... Ça marche
Pour pouvoir itérer de façon intéressante avec __iter__ il faut à la fois self.valeur=None et self.suivant=None au début.
Je n'aime pas trop cela.
Ça prendrait une classe de noeuds et une classe de liste qui hériterait de la première.
On construit une tête de liste et on y attache les noeuds.
C'est plus facile pour ajouter au début ou à la fin et itérer adéquatement.
Et on peut avoir une liste vide contrairement à ici.
- Edité par PierrotLeFou 8 octobre 2021 à 8:00:47
Le Tout est souvent plus grand que la somme de ses parties.
Alors, je poste mon code quick and dirty ... - class Noeud: def __init__(self, valeur=None, suivant=None): self.valeur=valeur self.suivant=suivant class Liste(Noeud): def __init__(self): self.nombre = 0 self.premier=None self.dernier=None def preceder(self, valeur=None): node = Noeud(valeur=valeur, suivant=self.premier) self.premier=node self.nombre+=1 def ajouter(self, valeur=None): node=Noeud(valeur=valeur) if self.dernier is None: self.premier=node else: self.dernier.suivant=node self.dernier=node self.nombre+=1 def retirer(self): if self.premier is None: raise ValueError("retirer d'une liste vide") node=self.premier self.premier=self.premier.suivant self.nombre-=1 valeur=node.valeur del(node) return valeur def compte(self): return self.nombre def __iter__(self): node=self.premier while node is not None: yield node.valeur node=node.suivant L=Liste() L.ajouter(4) L.preceder(3) L.ajouter(5) for i in L: print(i) for i in range(L.compte()): print(L.retirer())
Le Tout est souvent plus grand que la somme de ses parties.
D'où l'intérêt de maîtriser les bases et de prendre l'habitude de tester ses théories avant d'y croire.
liste chainée POO - assigner nouvel objet à self
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
?
Python c'est bon, mangez-en.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.