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

 更新时间:2025年08月12日 08:31:18   作者:一只野生的善逸  
在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章主要介绍了Python学习笔记之getattr和hasattr用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

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

相关文章

  • Pandas中Concat与Append的实现与区别小结

    Pandas中Concat与Append的实现与区别小结

    本文主要介绍了Pandas中Concat与Append的实现与区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • Django实现后台上传并显示图片功能

    Django实现后台上传并显示图片功能

    这篇文章主要介绍了Django实现后台上传并显示图片功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Python多行输入程序实例代码及扩展

    Python多行输入程序实例代码及扩展

    我们都知道Python内置方法input只能输入一行内容,我们今天来实现输入多行文本功能,这篇文章主要给大家介绍了关于Python多行输入程序的相关资料,需要的朋友可以参考下
    2022-04-04
  • python区块链创建多个交易教程

    python区块链创建多个交易教程

    这篇文章主要为大家介绍了python区块链创建多个交易的实现示例教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Python pygame绘制游戏图像

    Python pygame绘制游戏图像

    这篇文章主要介绍了Python pygame绘制游戏图像,文章围绕主题展开pygame模块完成飞机大战游戏的实战开发的案例详情,需要的朋友可以参考一下
    2022-08-08
  • 浅谈编码,解码,乱码的问题

    浅谈编码,解码,乱码的问题

    下面小编就为大家带来一篇浅谈编码,解码,乱码的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • Numpy广播域的理解

    Numpy广播域的理解

    本文主要介绍了Numpy广播域的理解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Python OS模块中常用的文件和目录操作方法

    Python OS模块中常用的文件和目录操作方法

    在Python编程中,os模块提供了用于与操作系统交互的功能,其中,文件和目录操作是os模块的核心功能之一,本文将详细介绍os模块中常用的文件和目录操作方法,需要的朋友可以参考下
    2026-03-03
  • 使用Python脚本生成随机IP的简单方法

    使用Python脚本生成随机IP的简单方法

    这篇文章主要介绍了使用Python脚本生成随机IP的简单方法,并且可以自己设定IP数值范围,需要的朋友可以参考下
    2015-07-07
  • python实现将Excel文件转换为JSON文件

    python实现将Excel文件转换为JSON文件

    在数据处理和分析中,Excel和JSON是两种常见的数据格式,本文将详细介绍如何使用Python将Excel文件转换为JSON文件,我们将使用pandas库,这是一个强大的数据分析工具,能够方便地读取和处理各种数据格式,需要的朋友可以参考下
    2024-07-07

最新评论