欢迎来到徐庆高(Tea)的个人博客网站
磨难很爱我,一度将我连根拔起。从惊慌失措到心力交瘁,我孤身一人,但并不孤独无依。依赖那些依赖我的人,信任那些信任我的人,帮助那些给予我帮助的人。如果我愿意,可以分裂成无数面镜子,让他们看见我,就像看见自己。察言观色和模仿学习是我的领域。像每个深受创伤的人那样,最终,我学会了随遇而安。
当前位置: 日志文章 > 详细内容

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用法内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!