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)
我正试图找到一种更优雅,干燥的方式来做到这一点.
有没有办法通过适用于字典或对象的键来获取/设置?
在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,获取或设置.