代码之家  ›  专栏  ›  技术社区  ›  JAL

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

  •  4
  • JAL  · 技术社区  · 14 年前

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

    我想找一个更优雅,更干燥的方法来做这个。

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

    3 回复  |  直到 14 年前
        1
  •  6
  •   Daniel Roseman    14 年前

    你可以用一个 Bunch class ,它将字典转换为接受点符号的内容。

        2
  •  6
  •   Chris Morgan    14 年前

    在JavaScript中,它们是等价的(通常很有用;我在做web开发时会提到它),但是在Python中它们是不同的- [items] .attributes .

    使用 __getattr__ :

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

    那就用它就像你用 dict (它将接受 迪克特 作为一个参数 迪克特 ),但你可以像 item.image_url 它会映射到 item.image网址 ,获取或设置。

        3
  •  2
  •   Ikke    14 年前

    我不知道这意味着什么,但我会在django模型中添加一个方法,该方法将字典读入自身,这样您就可以通过模型访问数据。