Python 如何检查对象是否有某个属性?

用 hasattr(obj, 'attr') 检查属性是否存在;配合 getattr(obj, 'attr', 默认值) 安全取值。本文给出用法、注意事项与动态属性场景。

最佳实践
Python 如何检查对象是否有某个属性?封面

用内置函数 hasattr(obj, '属性名') 返回 True/False;取值时用 getattr(obj, '属性名', 默认值) 一步完成"有就取、没有用默认",更 Pythonic。

基本用法

class User:
    def __init__(self):
        self.name = "Tom"

u = User()
hasattr(u, 'name')      # True
hasattr(u, 'email')     # False

安全取值(推荐)

# 代替 if hasattr(...): x = obj.attr
email = getattr(u, 'email', '未设置')

注意事项

  1. hasattr 会吞掉属性内部的异常:属性是 property 且内部抛错时,hasattr 返回 False——可能掩盖 bug;严格场景用 try/getattr 或 vars() 检查;
  2. 动态属性__getattr__ 定义过的对象,hasattr 对几乎任何名字都返回 True;
  3. 检查方法存在性同样适用:hasattr(obj, 'save')

替代方案

# 看实例字典(不含类属性与方法)
'name' in vars(u)

# 看类与实例全部属性
'name' in dir(u)

常见问题(FAQ)

Q:getattr 和 hasattr 哪个快? 需要取值时一次 getattr 更快(省去重复查找)。

Q:能检查模块有没有某函数吗? 能——模块也是对象,hasattr(os, 'getenv')

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台