Python:如何交换访问对象或字典?

JAL*_*JAL 4 python django dictionary object

我正在编写一个Django视图,有时从数据库中获取数据,有时从外部API获取数据.

当它来自数据库时,它是一个Django模型实例.必须使用点表示法访问属性.

来自API,数据是字典,可通过下标表示法访问.

在任何一种情况下,都会对数据进行一些处理.

我想避免

if from_DB:
   item.image_url='http://example.com/{0}'.format(item.image_id)
else:
   item['image_url']='http://example.com/{0}'.format(item['image_id'])
Run Code Online (Sandbox Code Playgroud)

我正试图找到一种更优雅,干燥的方式来做到这一点.

有没有办法通过适用于字典或对象的键来获取/设置?

Chr*_*gan 6

在JavaScript中它们是等价的(通常很有用;我提到它以防你不知道你正在进行web开发),但在Python中它们是不同的 - [items]而不是.attributes.

使用__getattr__以下命令编写允许通过属性访问的内容很容易:

class AttrDict(dict):
    def __getattr__(self, attr):
        return self[attr]

    def __setattr__(self, attr, value):
        self[attr] = value
Run Code Online (Sandbox Code Playgroud)

然后就像你使用它一样使用它dict(它会接受a dict作为参数,因为它正在扩展dict),但是你可以做类似的事情item.image_url,它会将它映射到item.image_url,获取或设置.


Dan*_*man 6

您可以使用Bunch类,它将字典转换为接受点表示法的字体.