N-PN White-Hat Project
[Python] Probleme attribute Error pour classe - Version imprimable

+- N-PN White-Hat Project (https://dev.n-pn.fr/forum)
+-- Forum : Programmation (https://dev.n-pn.fr/forum/forumdisplay.php?fid=72)
+--- Forum : Langages interprétés (https://dev.n-pn.fr/forum/forumdisplay.php?fid=27)
+--- Sujet : [Python] Probleme attribute Error pour classe (/showthread.php?tid=2368)



[Python] Probleme attribute Error pour classe - Atlas - 05-11-2012

Bonsoir à tous ,
je suis un tuto sur le python , j'essaye de créer une classe...
J'ai un problème lors que j'utilise self.items() , j'ai l'erreur :
Citation :AttributeError: 'DictionnaireOrdonne' object has no attribute 'items'

Voici mon code :
Code PYTHON :
#!/usr/local/bin/python3.3
# -*-coding:utf-8 -*

""" Création d'une classe : un dictionnaire ordonné
     L'ordre des données est maintenu
    et il peut donc, contrairement aux dictionnaires usuels, être trié
    ou voir l'ordre de ses données inversées"""


class MaClasse:

    def __init__(self,base={},**donnees):
        """ Constructeur du dictionnaire
              on peut créer le dictionnaire vide
              à l'aide d'un dictionnaire de base
              ou en entrant directement les données      
         """


        self.keys=list()    # liste contenant les clés de notre dictionnaire
        self.values=list()   # liste contenant les valeurs de notre dictionnaire

         # on vérifie que base est un dict ou DictionnaireOrdonne
        if type(base) not in (dict,DictionnaireOrdonne):
           raise TypeError("le type attendu est un dictionnaire ( usuel ou ordonné )")
           
        # on récupere les clés du dictonnaire de base
        for cle in base:
              self[cle] = base[cle]

        # on recupere les clés de données
        for cle in donnees:
            self[cle] = donnees[cle]

    def __repr__(self):
        """Représentation de notre objet. C'est cette chaîne qui sera affichée
        quand on saisit directement le dictionnaire dans l'interpréteur, ou en
        utilisant la fonction 'repr'"""

        chaine = "{"
        premier_passage = True
        for cle, valeur in self.items():
            if not premier_passage:
                chaine += ", " # On ajoute la virgule comme séparateur
            else:
                premier_passage = False
            chaine += repr(cle) + ": " + repr(valeur)
        chaine += "}"
        return chaine

    def __str__(self):
        return __repr__(self)

    def __getitem__(self, index):
        """Cette méthode spéciale est appelée quand on fait objet[index]
        Elle redirige vers self._dictionnaire[index]"""

        for i,key in keys:
            if key == index :
                return self.values(i)

    def items(self):
        for i,key in enumerate(self.keys)
            value = self.value[i]
            yield(key,value)



RE: Probleme attribute Error pour classe - w00dy18 - 05-11-2012

A qu'elle ligne tu as l'erreur ? Sinon tu as déjà oublié un ":" dans for i,key in enumerate(self.keys) à la fin de ton code. Mais je ne crois pas que l'erreur soit de là...


RE: Probleme attribute Error pour classe - Luxerails - 06-11-2012

Mh.. l'erreur ne viendrait pas d'ici ?
Code :
# on récupere les clés du dictonnaire de base
        for cle in base:
              self[cle] = base[cle]

        # on recupere les clés de données
        for cle in donnees:
            self[cle] = donnees[cle]

Du coup tu transformerais self en dic et quand tu appelles self.items(), il croit que tu appelles le dic au lieu de la fonction.


RE: Probleme attribute Error pour classe - Atlas - 06-11-2012

je vais essayer de voir si ça ne vient pas de là , désolé pour la lenteur de ma réponse , je suis sous windows j'installe python etc ...

Et merci pour le : oublié !
Ce n'est pas à une ligne précise c'est quand j'essaye d'afficher le dictionnaire en utilisant __repr__


Edit : Je suis sous windows , remis le ":" manquant , et là ça fonctionne nickel , je verrais si cela vient de Linux ou pas ... Merci de votre aide, je poserais les questions ici si d'autre problème apparaissent ou quand je retournerais sous linux


RE: Probleme attribute Error pour classe - w00dy18 - 06-11-2012

Youhou !!! J'ai réussi à être utile Tongue