从字符串或列表更改对象类型[Python]

从字符串或列表更改对象类型[Python]

问题描述:

我有一个小问题。从字符串或列表更改对象类型[Python]

我想通过名称来重新创建模型对象的属性来创建一个有序的字典的函数。模型基于来自数据库的数据,有时它们应该被转换。如果list元素是一个字符串 - 没有问题,ODictionary被创建,并且它正在工作。但是,如果我想将int转换为字符串 - 有一个问题。 我用元组做了。第一个元素是新的OrderedDictionary项目的名称,第二个元素应该是正确的类型。

例如: elementValue = GETATTR(元件[1],元素[0]) 随着( “ID”,INT)我得到 “AttributeError的:对象类型 'INT' 不具有属性 'ID'” 所以它的错误选项...

这是我第一次与getattr。基本用法(对我来说)没有问题,当我不得不通过名称检索对象att,但如何从给定的str类型转换为不同类型?

+0

您想要将您的字符串转换为什么类型? – Goyo

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