当前位置: 首页 > 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.dtcms.com/a/325357.html

相关文章:

  • Vibe Coding 自然语言驱动 AI 编程方式
  • 5G NR NTN 在 PHY 层和 MAC 层实现 OAI
  • 第9节 大模型分布式推理核心挑战与解决方案
  • 代码管理工具——Git基本使用方法
  • 架构设计(15):AI时代的架构设计
  • 系统编程——信号通信
  • MySQL-日志
  • 第10节 大模型分布式推理典型场景实战与架构设计
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的多目标跟踪与行为分析优化(393)
  • 低代码开发实战案例,如何通过表单配置实现数据输入、数据存储和数据展示?
  • Docker-08.Docker基础-本地目录挂载
  • Camera open failed
  • Flutter SharedPreferences存储数据基本使用
  • Apollo平台下相机和激光雷达手眼联合标定
  • 面试题-----RabbitMQ
  • RabbitMQ 消息转换器详解
  • OV5640 相机开发流程
  • 闸机控制系统从设计到实现全解析:第 5 篇:RabbitMQ 消息队列与闸机通信设计
  • C语言:贪吃蛇游戏
  • MiniCPM-V 4.0开源,号称是手机上的GPT-4V
  • 41.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--集成网关--网关集成Swagger
  • 量子计算:叩响金融定价革命的大门——期权定价的范式转移
  • 用Python实现Excel转PDF并去除Spire.XLS水印
  • glide缓存策略和缓存命中
  • 基于 JavaWeb+MySQL设计实现博客管理系统
  • [激光原理与应用-230]:物理学主要分支、研究对象、衍生技术及职业方向解析
  • 智慧零售的本质重构与技术创新:基于定制开发开源AI智能名片S2B2C商城小程序的实践路径
  • Redis应⽤-缓存与分布式锁
  • MySQL误删数据了,如何快速恢复?
  • GraalVM !拥抱云原生的 JVM