Bonjour

Je viens ici ouvrir une nouvelle discussion à propos d'un problème éventuel sur l'utilisation systématique du dictionnaire.

En effet, je me demande si le dictionnaire peut être un outil universel de gestion.

Je m'explique: imaginons que je veuille gérer une personne (nom, prénom, age). Instinctivement, je penserai au départ à un objet de ce type
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class cPersonne(object):
    def __init__(self):
        self.__nom=None
        self.__prenom=None
        self.__age=None
 
    def setValue(*args, **kwargs):
        for (k, v) in kwargs.iteritems():
            if k == "nom":
                self.__nom=v
                continue
            if k == "prenom" :
                self.__prenom=v
                continue
            if k == "age":
                self.__age=v
                continue
            raise keyError
 
    def getValue(k):
        if k == "nom": return self.__nom
        if k == "prenom" : return self.__prenom
        if k == "age": return self.__age
        raise keyError


Puis, je peux partir sur ma gestion
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
personne=cPersonne()
personne.setValue(nom="toto", prenom="alfred", age=18)
print personne.getValue("nom")
print personne.getValue("prenom")
print personne.getValue("age")
etc...

Mais là, je me dis que je peux tout aussi bien partir directement sur un dictionnaire ce qui me simplifie en plus pas mal de code...
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
class cPersonne(object):
    def __init__(self):
        self.__data={"nom": None, "prenom": None, "age": None}
 
    def setValue(*args, **kwargs):
        for (k, v) in kwargs.iteritems():
            if k not in self.__data.iterkeys(): raise keyError
            self.__data[k]=v
    def getValue(k):
        return self.__data[k]

Avec la même façon de s'en servir
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
personne=cPersonne()
personne.setValue(nom="toto", prenom="alfred", age=18)
print personne.getValue("nom")
print personne.getValue("prenom")
print personne.getValue("age")

Mais toutefois bien plus facilement évolutive (si je veux rajouter l'adresse je n'ai qu'une info à rajouter dans data). Alors en fait je me demande s'il y aurait une contre-indication quelconque (notamment sur la vitesse d'exécution) à envisager systématiquement la seconde manière de conception chaque fois qu'on doit gérer qqchose ??? Parce que quand je regarde divers objets par-ci par là (par exemple sur des exemples PyQt), c'est toujours la première conception qui est mise en oeuvre. Là je me dis que ceux qui ont programmé ces exemples ne sont pas des manches et ont donc sûrement dû avoir la même idée mais ils ne l'ont jamais exploitée.
Et donc peut-être je me dis que cette façon de concevoir des objets "tout dico" ne serait peut-être pas tiptop question perfos.

Donc si quelqu'un a un avis là-dessus...

Merci à tous de votre attention