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

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.lryc.cn/news/617982.html

相关文章:

  • Docker中ES安装分词器
  • 【11-计算机视觉介绍】
  • 【代码随想录day 17】 力扣 654.最大二叉树
  • LeetCode151~188题解
  • Apache RocketMQ:消息可靠性、顺序性与幂等处理的全面实践
  • Docker 详解(保姆级安装+配置+使用教程)
  • MySQL高可用改造之数据库开发规范(大事务与数据一致性篇)
  • C++方向知识汇总(三)
  • Git 常用命令总结
  • 泰国文字识别技术:从精准识别字符向深度理解语义的方向不断进化
  • 日本VPS内存溢出了如何优化
  • 数据变而界面僵:Vue/React/Angular渲染失效解析与修复指南
  • 稠密检索:基于神经嵌入的高效语义搜索范式
  • 【LeetCode 热题 100】(七)链表
  • 数据结构——树(02构造二叉树,代码练习)
  • 【网络基础】深入理解 TCP/IP 协议体系
  • 无人机航拍数据集|第11期 无人机人员行为目标检测YOLO数据集1868张yolov11/yolov8/yolov5可训练
  • libwebsockets 服务端获取过代理的真实连接IP
  • [4.2-1] NCCL新版本的register如何实现的?
  • AI(领域)应用落地技术决策指南:从双路径架构到系统性实施
  • Oracle 23AI 稳定执行计划:SQL Profile
  • 训练苹果风格Emoji生成模型的技术方案
  • Docker-09.Docker基础-Dockerfile语法
  • 数据上云有什么好处?企业数据如何上云?
  • Flutter Provider 状态管理全面解析与实战应用:从入门到精通
  • priority_queue(优先级队列)和仿函数
  • 关于linux系统编程2——IO编程
  • 内网依赖管理新思路:Nexus与CPolar的协同实践
  • redis常见的性能问题
  • Redis 数据倾斜