2017-10-17 7 views
-1

私は小さな問題があります。オブジェクト型を文字列またはリストから変更する[Python]

モデルオブジェクトの属性を名前で検索して順序付き辞書を作成する機能を作ろうとしています。モデルはデータベースのデータに基づいており、時にはそれらを変換する必要があります。リスト要素が文字列の場合、問題はありません。ODictionaryが作成され、それが機能しています。しかし、例えばintを文字列に変換したい場合、問題があります。 私はタプルでそれを作った。最初の要素は新しいOrderedDictionary項目の名前で、2番目は正しい種類です。例えば

: elementValue = GETATTR(要素[1]、要素[0]) ( "ID"、INT)でiが取得してい "はAttributeError:タイプオブジェクト 'intは' は属性 'ID' を有していません" その間違ったオプション...

これは私の初めてのgetattrです。名前でオブジェクトattを取得する必要があるが、与えられたstr型から別の型にキャストするには、基本的な使用方法(私の場合)に問題はありません。 getattr()ため

+0

文字列をどのタイプにキャストしますか? – Goyo

答えて

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...

署名object, attrname[, default]ある - objectは何の属性attrname(あなたの場合を持っていない場合objectあなたから属性を取得したいオブジェクトであること、attrname(文字列として)、属性名、およびdefaultオプションのデフォルト値defaultを渡さず、objectには属性がありませんattrnameあなたはAttributeErrorを取得します)。明らかにgetattr()はどんな種類の変換もしませんが、これはあなた自身で行う必要があります。

あなたはいくつかのヒントよりもあなたに多くを与えるためにあなたのコードの十分を投稿しませんでしたが、あなたは(typeconverterは、元の属性値を取得し、変換された値を返す任意の呼び出し可能です)("attrname", typeconverter)、あなたは何をしたいのリストを持っていると仮定します

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 
関連する問題