gpt4 book ai didi

python - 基于对象现有的 ot 或属性,以更 pythonic 的方式改进重复的 for 循环

转载 作者:太空宇宙 更新时间:2023-11-04 00:04:07 24 4
gpt4 key购买 nike

我有一个对象(从数据库中检索),具有多个属性:

db_obj.default_attr= "textdefault"
db_obj.additional = {
"alpha": "texta",
"beta": "textb",
"gama": "textg",
"teta": "textt",
...
}
db_obj.name: "some_name"
....

additional 属性也是一个 Object 可以是empty/null/not having all values,在 db 中是 null 或 json

然后类型一个数组:["alpha", "gama", ...]


我有以下功能,称为:

set_att(obj=db_object, types=types)

我需要创建一个基于types 数组的新对象:

属性示例:

  new_obj.alpha = "texta"
new_obj.gama = "textdefault" # because gama was not found in additional

我定义了函数:

def set_att(db_obj=None, types=None):

new_obj = types.SimpleNamespace()

try:

add = db_obj.getattr(additional)

# cycle thru types, and assign the value from the db_obj if exist or the default_attr value
for item_type in types:
try:
setattr(new_obj, item_type, add.getattr(item_type))
except AttributeError:
setattr(new_obj, item_type, obj.getattr(default_attr))

# if there is not addtional I still set default for type
except AttributeError:
for item_type in types:
setattr(new_obj, item_type, obj.getattr(default_attr)

它看起来很天真,我正在寻找一个更 pythonic 的选项。

最佳答案

您可以使用 hasattr 来检查对象是否具有属性,而不是捕获 AttributeException。这将使代码更易于阅读,因为它明确地处理了属性不存在的预期情况。使用异常让它看起来像是一个错误案例。

 for item_type in types:
if hasattr(add, item_type):
value = getattr(add, item_type)
else:
value = getattr(obj, default_attr)
setattr(new_obj, item_type, value)

关于python - 基于对象现有的 ot 或属性,以更 pythonic 的方式改进重复的 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54792041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com