当前位置: 代码网 > it编程>前端脚本>Python > Python学习笔记之getattr和hasattr用法示例详解

Python学习笔记之getattr和hasattr用法示例详解

2025年08月12日 Python 我要评论
1.getattr用法详解1.1 基本作用getattr(object, name[, default])用于动态获取对象的属性值。object:要操作的对象。name:属性名(字符串)。defaul

1.getattr用法详解

1.1 基本作用

getattr(object, name[, default])
用于动态获取对象的属性值。

  • object:要操作的对象。
  • name:属性名(字符串)。
  • default(可选):如果属性不存在,返回的默认值(否则会抛异常)。

1.2 示例

class person:
    name = "alice"
    age = 20

person = person()

print(getattr(person, "name"))         # 输出: alice
print(getattr(person, "age"))          # 输出: 20
print(getattr(person, "gender", "女")) # 属性不存在,输出: 女

1.3 原理

  • getattr 实际上会调用对象的 __getattribute__ 方法。
  • 如果找不到属性且提供了 default,则返回 default,否则抛出 attributeerror

2.hasattr用法详解

2.1 基本作用

hasattr(object, name)
用于判断对象是否有某个属性。

  • object:要检查的对象。
  • name:属性名(字符串)。

返回值:

  • 存在则返回 true,否则返回 false

2.2 示例

class person:
    name = "alice"

person = person()

print(hasattr(person, "name"))      # 输出: true
print(hasattr(person, "age"))       # 输出: false

2.3 原理

  • hasattr 实际上会尝试用 getattr(object, name) 获取属性。
  • 如果没有抛出 attributeerror,就返回 true,否则为 false

3. 二者区别与联系

3.1 联系

  • 都用于动态操作对象属性,底层都依赖于魔法方法 __getattribute__

3.2 区别

  • getattr 用于取值,可以设置默认值。
  • hasattr 用于判断属性是否存在,不取值。

3.3 注意

⚠️ 注意:hasattr 内部实际上是 try-except 机制,属性访问可能触发属性的 getter 或 property 代码块!

4. 实用技巧与注意事项

4.1 实用技巧

  • getattr 动态读取属性,适合反射场景(如 orm、插件、配置读取等)。
  • hasattr 判断属性是否存在,避免代码报错。

4.2 注意事项

  • 如果属性不存在且没有传递 defaultgetattr 会直接报错。
  • hasattr 访问属性时,带有副作用时要小心(比如 property/自定义 __getattr__)。

5. 综合示例

5.1 示例代码

class demo:
    def __init__(self):
        self.x = 10
    @property
    def y(self):
        print("访问了 y")
        return 20

d = demo()
print(hasattr(d, 'x'))  # true
print(hasattr(d, 'y'))  # true,同时会打印: 访问了 y
print(getattr(d, 'y'))  # 访问了 y,输出: 20
print(getattr(d, 'z', '不存在'))  # 输出: 不存在

6. 总结表

方法作用返回值不存在时行为
getattr获取属性值属性值/默认值抛 attributeerror/返回默认
hasattr判断属性是否存在true/false返回 false

到此这篇关于python学习笔记之getattr和hasattr用法的文章就介绍到这了,更多相关python getattr和hasattr用法内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com