文章目录
- getattr(object, name[, default])用于动态获取对象的属性值。 object:要操作的对象。 name:属性名(字符串)。 default(可选):如果属性不存在,返回的默认值(否则会抛异常)。
- class Person: name = “Alice” age = 20 person = Person() print(getattr(person, “name”)) # 输出: Alice print(getattr(person, “age”)) # 输出: 20 print(getattr(person, “gender”, “女”)) # 属性不存在,输出: 女
- getattr 实际上会调用对象的 __getattribute__ 方法。 如果找不到属性且提供了 default,则返回 default,否则抛出 AttributeError。
- hasattr(object, name)用于判断对象是否有某个属性。 object:要检查的对象。 name:属性名(字符串)。 返回值: 存在则返回 True,否则返回 False。
- class Person: name = “Alice” person = Person() print(hasattr(person, “name”)) # 输出: True print(hasattr(person, “age”)) # 输出: False
- hasattr 实际上会尝试用 getattr(object, name) 获取属性。 如果没有抛出 AttributeError,就返回 True,否则为 False。
目录
- 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. 总结表
getattr(object, name[, default])
用于动态获取对象的属性值。
object:要操作的对象。name:属性名(字符串)。default(可选):如果属性不存在,返回的默认值(否则会抛异常)。
class Person:
name = "Alice"
age = 20
person = Person()
print(getattr(person, "name")) # 输出: Alice
print(getattr(person, "age")) # 输出: 20
print(getattr(person, "gender", "女")) # 属性不存在,输出: 女
getattr 实际上会调用对象的 __getattribute__ 方法。
- 如果找不到属性且提供了
default,则返回 default,否则抛出 AttributeError。
getattr 实际上会调用对象的 __getattribute__ 方法。default,则返回 default,否则抛出 AttributeError。
hasattr(object, name)
用于判断对象是否有某个属性。
object:要检查的对象。name:属性名(字符串)。
返回值:
- 存在则返回
True,否则返回False。
class Person:
name = "Alice"
person = Person()
print(hasattr(person, "name")) # 输出: True
print(hasattr(person, "age")) # 输出: False
hasattr 实际上会尝试用 getattr(object, name) 获取属性。
- 如果没有抛出
AttributeError,就返回 True,否则为 False。
hasattr 实际上会尝试用 getattr(object, name) 获取属性。AttributeError,就返回 True,否则为 False。
- 都用于动态操作对象属性,底层都依赖于魔法方法
__getattribute__。
__getattribute__。
getattr 用于取值,可以设置默认值。
hasattr 用于判断属性是否存在,不取值。
getattr 用于取值,可以设置默认值。hasattr 用于判断属性是否存在,不取值。
⚠️ 注意:hasattr 内部实际上是 try-except 机制,属性访问可能触发属性的 getter 或 property 代码块!
⚠️ 注意:hasattr 内部实际上是 try-except 机制,属性访问可能触发属性的 getter 或 property 代码块!
- 用
getattr 动态读取属性,适合反射场景(如 ORM、插件、配置读取等)。
- 用
hasattr 判断属性是否存在,避免代码报错。
getattr 动态读取属性,适合反射场景(如 ORM、插件、配置读取等)。hasattr 判断属性是否存在,避免代码报错。
- 如果属性不存在且没有传递
default,getattr 会直接报错。
hasattr 访问属性时,带有副作用时要小心(比如 property/自定义 __getattr__)。
default,getattr 会直接报错。hasattr 访问属性时,带有副作用时要小心(比如 property/自定义 __getattr__)。
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', '不存在')) # 输出: 不存在
| 方法 | 作用 | 返回值 | 不存在时行为 |
|---|---|---|---|
| getattr | 获取属性值 | 属性值/默认值 | 抛 AttributeError/返回默认 |
| hasattr | 判断属性是否存在 | True/False | 返回 False |
到此这篇关于Python学习笔记之getattr和hasattr用法的文章就介绍到这了,更多相关Python getattr和hasattr用法内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!
您可能感兴趣的文章:
- Python中getattr函数和hasattr函数作用详解
- 详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
- 全面了解Python的getattr(),setattr(),delattr(),hasattr()
- 详解Python的hasattr() getattr() setattr() 函数使用方法
- 浅析Python中的getattr(),setattr(),delattr(),hasattr()
- 一文搞懂Python的hasattr()、getattr()、setattr() 函数用法
- 浅谈python中的getattr函数 hasattr函数
- python中hasattr()、getattr()、setattr()函数的使用
- 一次搞懂hasattr()/getattr()/setattr()在Python中的应用