当前位置: 首页 > ds >正文

Python笔记之`getattr`和`hasattr`用法详解

Python笔记之getattrhasattr用法详解

在这里插入图片描述

code review!

文章目录

  • Python笔记之`getattr`和`hasattr`用法详解
    • 1. `getattr` 用法详解
      • 1.1 基本作用
      • 1.2 示例
      • 1.3 原理
    • 2. `hasattr` 用法详解
      • 2.1 基本作用
      • 2.2 示例
      • 2.3 原理
    • 3. 二者区别与联系
      • 3.1 联系
      • 3.2 区别
      • 3.3 注意
    • 4. 实用技巧与注意事项
      • 4.1 实用技巧
      • 4.2 注意事项
    • 5. 综合示例
      • 5.1 示例代码
    • 6. 总结表

1. getattr 用法详解

1.1 基本作用

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

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

1.2 示例

class Person:name = "Alice"age = 20person = 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@propertydef y(self):print("访问了 y")return 20d = 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
http://www.xdnf.cn/news/17737.html

相关文章:

  • (二)vscode搭建espidf环境,配置wsl2
  • 【Altium designer】一键添加多个器件参数的“备注”
  • GPT-5越狱与零点击AI代理攻击:云与IoT系统面临新型威胁
  • 如何在 Ubuntu 24.04 LTS Linux 上安装和使用 Flatpak
  • 使用dockge 安装 photoprism
  • Nacos添加权限
  • Springboot-vue 地图展现
  • C++多态是如何实现
  • 【Altium designer】解决报错“Access violation at address...“
  • 机器学习第九课之DBSCAN算法
  • 【接口自动化测试】---YAML、JSON Schema
  • 02Vue3
  • github上传项目
  • 视频前处理技术全解析:从基础到前沿
  • Elasticsearch 官方 Node.js 从零到生产
  • docker安装Engine stopped
  • AVS Video Converter视频转换与编辑工具深度评测
  • 功能、延迟、部署、成本全解析:本地化音视频 SDK 对比 云端方案
  • Go 多进程编程-socket(套接字)
  • 定制化4G专网架构,满足多行业专属需求
  • 区间修改 - 差分
  • Kubernetes部署apisix的理论与最佳实践(一)
  • npm install报错~[master] npm install npm error code ERESOLVE npm err
  • 大数据系统架构模式:驾驭海量数据的工程范式
  • RabbitMQ 消息转换器详解
  • 心理咨询|学生心理咨询评估系统|基于Springboot的学生心理咨询评估系统设计与实现(源码+数据库+文档)
  • 使用TextureView和MediaPlayer播放视频黑屏问题
  • AI模型服务接入WAF防火墙
  • 【C++】哈希表的实现(unordered_map和unordered_set的底层)
  • DDIA第五章:分布式数据复制中的一致性与冲突处理