Python:如何可以互换地访问对象或字典?

2024-04-26 22:57:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个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'])

我想找一种更优雅、更干练的方式来做这件事。在

有没有一种方法可以通过对字典或对象有效的键来获取/设置?在


Tags: 数据djangoimagecom视图apiid数据库
3条回答

您可以使用Bunch class,它将字典转换为接受点表示法的内容。在

我不知道这会产生什么影响,但是我会向django模型添加一个方法,该方法将字典读入其自身,这样您就可以通过模型访问数据。在

在JavaScript中,它们是等价的(通常很有用;如果您不知道您正在进行web开发,我会提到它),但是在Python中它们是不同的-[items]与{}。在

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

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

    def __setattr__(self, attr, value):
        self[attr] = value

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

相关问题 更多 >