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 注意事项
- 如果属性不存在且没有传递
default,getattr会直接报错。 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用法内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论