2017-10-17 73 views
-1

我有一個小問題。從字符串或列表更改對象類型[Python]

我想通過名稱來重新創建模型對象的屬性來創建一個有序的字典的函數。模型基於來自數據庫的數據,有時它們應該被轉換。如果list元素是一個字符串 - 沒有問題,ODictionary被創建,並且它正在工作。但是,如果我想將int轉換爲字符串 - 有一個問題。 我用元組做了。第一個元素是新的OrderedDictionary項目的名稱,第二個元素應該是正確的類型。

例如: elementValue = GETATTR(元件[1],元素[0]) 隨着( 「ID」,INT)我得到 「AttributeError的:對象類型 'INT' 不具有屬性 'ID'」 所以它的錯誤選項...

這是我第一次與getattr。基本用法(對我來說)沒有問題,當我不得不通過名稱檢索對象att,但如何從給定的str類型轉換爲不同類型?

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

getattr()簽名是object, attrname[, default] - object作爲對象,你想從,attrname屬性名稱(如字符串)的屬性,default如果object可選默認值沒有屬性attrname(如果你不通過defaultobject沒有屬性attrname你得到一個AttributeError)。顯然getattr()不會做任何類型的轉換,這是你自己必須做的事情。

你沒有發佈足夠的代碼給你超過幾個提示,但假設你有一個("attrname", typeconverter)的列表(其中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