2017-10-17 18 views
-1

J'ai un petit problème.Modification du type d'objet de la chaîne ou de la liste [Python]

J'essaye de faire une fonction pour créer un dictionnaire ordonné en retrivant des attributs d'objet modèle par les noms. Les modèles sont basés sur les données des bases de données et parfois ils doivent être convertis. Si l'élément list est une chaîne - il n'y a pas de problème, ODictionary est créé, et ça marche. Mais si je veux convertir par exemple int en chaîne - il y a un problème. Je l'ai fait avec des tuples. Le premier élément est le nom du nouvel élément OrderedDictionary, le second devrait être le bon type.

Par exemple: valeurElément = getattr (élément [1], élément [0]) Avec ("id", int) je reçois "AttributeError: objet type 'int' n'a pas d'attribut 'id'" Donc, sa mauvaise option ...

C'est ma première fois avec getattr. Il n'y a pas de problème avec l'utilisation de base (pour moi) quand je dois récupérer l'objet att par le nom mais comment lancer un autre type d'un type donné?

+0

De quel type voulez-vous couler votre chaîne? – Goyo

Répondre

1

elementValue = getattr(element[1], element[0])

With ("id", int) i'm getting "AttributeError: type object 'int' has no attribute 'id'" So its wrong option...

La signature getattr() est object, attrname[, default]-object être l'objet que vous souhaitez obtenir l'attribut de, attrname le nom d'attribut (sous forme de chaîne), et default une valeur par défaut facultative si object n'a pas d'attribut attrname (si vous ne pas passer default et object n'a aucun attribut attrname vous obtenez un AttributeError). Évidemment, getattr() ne fera aucune conversion de type, c'est quelque chose que vous devrez faire par vous-même.

Vous n'avez pas envoyé assez de code pour vous donner plus de quelques indications, mais en supposant que vous avez une liste de ("attrname", typeconverter) (où typeconverter est tout callable en prenant la valeur d'attribut d'origine et en retournant la valeur convertie), ce que vous voulez ressemblerait à quelque chose comme:

def to_odict(obj, attrlist): 
    od = OrderedDict() 
    for attrname, converter in attrlist: 
     # TODO : error handling ??? 
     raw_val = getattr(obj, attrname) 
     val = converter(raw_val) 
     od["attrname"] = val 
    return od