我想得到一个mongoengine模型对象的属性,但它缺少了(它经常在mongo中):
unit.city
给了我AttributeError
unit.get('city')
说'Unit' object has no attribute 'get'
我无法通过dir(unit)
找到任何合适的方法。
所以我必须使用标准的python语句:
city = unit.city if 'city' in unit else None
对于get
操作来说,这有点复杂,因为我有很多这种转换。
所以我想知道是否有任何通用方法来获取属性值或某个默认值(如果属性不存在) - 例如get
类型为dict
:
city = unit.get('city') # None
# or
city = unit.get('city', 'Moscow') # 'Moscow'
我会定义自己的函数get
,但我感兴趣的是标准库中是否存在任何函数。然而,from operation import getitem
无法做到这一点。
顺便说一句,我使用的是python 2。
答案 0 :(得分:3)
一般来说,python有两种常见的模式。混合hasattr + getattr或将整个事物包装在try / except
中city = getattr(unit,'city','Moscow')
其他方法是
try:
city = unit.city
except AttributeError:
city = None
第二个更像是pythonic。但是,当您处理数据库时。最好使用ORM并一起避免这类事情。
答案 1 :(得分:1)
有getattr(object, name[, default])
:
city = getattr(unit, 'city', 'Moscow')