【问题标题】:Changing object type from string or list [Python]从字符串或列表更改对象类型 [Python]
【发布时间】:2018-03-28 21:05:57
【问题描述】:

我有一个小问题。

我正在尝试通过按名称检索模型对象的属性来创建一个创建有序字典的函数。模型基于数据库中的数据,有时应该进行转换。如果列表元素是字符串 - 没有问题,则创建 ODictionary,并且它正在工作。但是,如果我想将例如 int 转换为 string - 就会出现问题。 我用元组做的。第一个元素是新的 OrderedDictionary 项目的名称,第二个应该是正确的类型。

例如: elementValue = getattr(element[1], element[0]) 使用(“id”,int)我得到“AttributeError:类型对象'int'没有属性'id'” 所以它的错误选择......

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

【问题讨论】:

  • 你想把你的字符串转换成什么类型​​?

标签: python types casting ordereddictionary


【解决方案1】:

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

有了("id", int),我得到了"AttributeError: type object 'int' has no attribute 'id'",所以这是错误的选择......

getattr() 的签名是 object, attrname[, default] - object 是您要从中获取属性的对象,attrname 是属性名称(作为字符串),如果 @987654329,default 是可选的默认值@ 没有属性attrname(如果你没有通过default 并且object 没有属性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

【讨论】:

    猜你喜欢
    • 2022-08-18
    • 1970-01-01
    • 2021-08-26
    • 2020-06-24
    • 1970-01-01
    • 2020-10-27
    • 2015-08-02
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多