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

Python中如何批量判断类属性是否存在并追加其值?

简化类属性存在性检测的循环实现

嘿,你说得对,这种重复调用hasattr的写法确实有点啰嗦,完全可以用循环来批量处理,让代码更简洁易读。

优化思路

我们可以先定义一个待检查的对象-属性对列表,把需要检测的每个对象和对应的属性名整理进去,然后遍历这个列表,统一做存在性判断和值的追加操作。这样不仅减少了重复代码,以后要添加新的属性检测也只需要在列表里加一行就行,维护起来更方便。

优化后的代码

# 定义需要检查的对象与属性映射
check_items = [
    (play, 'discard_pile_no'),
    (play, 'player_no'),
    (to, 'discard_pile_no'),
    (to, 'build_pile_no'),
    (to, 'player_no'),
]

index_error_lst = []
for obj, attr in check_items:
    if hasattr(obj, attr):
        index_error_lst.append(getattr(obj, attr))

# 检测最大值是否超过3,同时处理列表为空的情况(避免索引错误)
if index_error_lst and max(index_error_lst) > 3:
    return 0

额外优化点说明

  • 避免索引错误:原代码中如果index_error_lst是空列表,sorted(index_error_lst)[-1]会抛出IndexError。改用max(index_error_lst)并先判断列表是否非空,能避免这个问题。
  • 更灵活的取值:用getattr(obj, attr)直接获取属性值,比原代码里的obj.attr写法更适配循环场景。
  • 扩展性更强:如果之后需要新增其他属性检测,只需要在check_items列表里添加新的元组即可,不用再写重复的if hasattr代码块。

这样改造后的代码逻辑和原代码完全一致,但可读性和可维护性都提升了不少~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:41:29