You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

简化从非定义类型对象创建DotDict的代码实现

代码简化与效率优化方案

方案一:保持原功能的简化写法

原代码可以通过字典推导式结合生成器表达式重构,既简化结构又避免重复调用getattr提升效率:

return DotDict({
    name: value
    for name, value in ((n, getattr(obj, n)) for n in dir(obj))
    if not name.startswith('__') and not ismethod(value)
})
  • 用生成器表达式一次性获取属性名和对应的值,减少getattr的调用次数
  • 直接将推导结果传入DotDict构造函数,省去手动初始化字典并逐个赋值的步骤

方案二:针对实例属性的高效优化(按需选择)

如果你的需求仅需获取obj的实例自有属性(不需要包含类层面定义的属性),可以直接遍历obj.__dict__,性能比dir()+getattr()的组合更优:

return DotDict({
    name: value
    for name, value in obj.__dict__.items()
    if not name.startswith('__') and not ismethod(value)
})
  • obj.__dict__直接存储实例的属性键值对,无需额外通过getattr取值,执行效率更高
  • 注意:此方案不会包含类中定义的属性,仅适用于只需要实例自身属性的场景

内容的提问来源于stack exchange,提问作者UsayHi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 05:10:29