【问题标题】:Is there any way to use get with object instead of dict in python有没有办法在 python 中使用 get 和 object 而不是 dict
【发布时间】:2015-03-02 00:40:38
【问题描述】:

如果我有字典,这很好用

value = d.get(key, "empty")

但是如果d 是我的django model object 那么我就明白了

对象没有属性'get'

我该如何解决。如果键不存在,我希望具有与 dict 相同的行为来为空

【问题讨论】:

    标签: python django dictionary


    【解决方案1】:

    使用getattr():

    value = getattr(d, key, "empty")
    

    另一种选择是直接访问对象的__dict__:

    value = d.__dict__.get(key, "empty")
    

    但我建议使用getattr()

    更新:请注意getattr(some_dict, key)some_dict.get(key) 不同。 getattr() 获取对象的属性,但不获取字典的值。

    【讨论】:

    • 是否可以在基类中定义一些函数,这样如果我只使用d.key 那么我就会得到上述行为
    • 我在上面尝试过并再次收到此错误'dict' object has no attribute 'name'。我试过这个getattr(p.user, 'name', "")
    • 是的,您可以通过定义__getattr____getattribute__ 方法来覆盖getattr() 的行为:docs.python.org/2/reference/…
    • 这是完整的错误行File "report.py", line 46, in handle user.name = getattr(p.user, ’name', "") AttributeError: 'dict' object has no attribute ’name'
    • 错误出现在user.name 表达式中。据我了解user 是一个字典,所以你应该写user['name'] = getattr(p.user, ’name', '')
    猜你喜欢
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 2021-07-02
    • 2014-06-07
    相关资源
    最近更新 更多