J'ai un petit programme Python composé de très peu de modules (environ 4). Le module principal crée une liste de tuples, représentant ainsi un certain nombre d'enregistrements. Ces tuples sont disponibles pour les autres modules via une simple fonction qui les renvoie (par exemple, get_records()
).Est-il correct d'échanger des tuples entre des modules Python?
Je ne suis pas sûr si c'est un bon design cependant. Le problème étant que les autres modules ont besoin de connaître les index de chaque élément du tuple. Cela augmente le couplage entre les modules, et n'est pas très transparent pour quelqu'un qui veut utiliser le module principal.
Je peux penser à deux alternatives:
Faire les valeurs d'index des éléments de tuple disponibles comme des constantes de module (par exemple,
IDX_RECORD_TITLE
,IDX_RECORD_STARTDATE
, etc.). Cela évite le besoin de nombres magiques commetitle = record[3]
.N'utilisez pas de tuples, mais créez une classe d'enregistrement et renvoyez une liste de ces objets de classe. L'avantage étant que les méthodes de classe auront des noms auto-explicites comme
record.get_title()
. N'utilisez pas de tuples, mais plutôt des dictionnaires à la place. Donc, dans ce scénario, la fonction renvoie une liste de dictionnaires. L'avantage étant que les clés du dictionnaire sont également explicites (bien que quelqu'un utilisant le module aurait besoin de les connaître). Mais cela semble être un énorme frais généraux.
Je trouve tuples d'être l'une des grandes forces de Python (très facile à transmettre des données composées autour sans les frais généraux de codage des classes/objets), donc j'utiliser actuellement (1), mais toujours se demander ce qui être la meilleure approche.
'namedtuple()': exactement ce que je cherchais! Merci. – Rabarberski
Hmm, viens de découvrir que 'namedtuple' n'est pas supporté par Python 2.5 (ils ont été ajoutés en 2.6), ce que j'utilise pour la compatibilité avec Mac OS X. Peut-être devrais-je recourir à une classe de toute façon ... – Rabarberski