D'abord un peu d'arrière-plan. J'analyse un format de fichier simple et souhaite réutiliser les résultats dans le code python plus tard, j'ai donc créé une hiérarchie de classes très simple et écrit l'analyseur pour construire des objets à partir des enregistrements originaux dans les fichiers texte sur lesquels je travaille .Des manières élégantes d'imprimer un tas d'attributs d'instance dans python 2.6?
Dans le même temps, je voudrais charger les données dans une base de données héritée, les fichiers du chargeur pour lesquels un format simple séparé par des tabulations. La façon la plus simple serait de faire quelque chose comme:
print "{0}\t{1}\t....".format(record.id, record.attr1, len(record.attr1), ...)
Parce qu'il ya tant de colonnes pour imprimer si, je pensais que j'utiliser la classe Template
pour le rendre un peu plus facile de voir ce qui est quoi, à savoir:
templ = Template("$id\t$attr1\t$attr1_len\t...")
Et je me suis dit que je pouvais utiliser le disque en place de la carte utilisée par un appel substitute
, avec quelques mots-clés supplémentaires pour les valeurs dérivées:
print templ.substitute(record, attr1_len=len(record.attr1), ...)
Malheureusement, cela échoue, se plaignant que l'instance d'enregistrement n'a pas d'attribut __getitem__
.
Donc, ma question est double:
- dois-je mettre en œuvre
__getitem__
et si oui, comment? - Y a-t-il un moyen plus élégant pour quelque chose comme ça où vous avez juste besoin de sortir un tas d'attributs dont vous connaissez déjà le nom?
Merci! J'ai ajouté un essai - excepté pour transformer 'AttributeError's en' KeyError's. – wds