Python getattr() 函数
getattr() 是 Python 中用于获取对象属性值的内置函数。
getattr() 允许我们动态地访问对象的属性,而不是使用点号(.)静态访问。这在处理未知属性的情况下非常有用。
单词释义: getattr 是 get attribute(获取属性)的缩写。
基本语法与参数
语法格式
getattr(object, name) getattr(object, name, default)
参数说明
- 参数 object:
- 类型: 任意对象
- 描述: 要获取属性的对象。
- 参数 name:
- 类型: 字符串
- 描述: 属性名称。
- 参数 default(可选):
- 类型: 任意值
- 描述: 如果属性不存在,返回的默认值。
函数说明
- 返回值: 返回属性的值。
- 异常: 如果属性不存在且没有默认值,会抛出 AttributeError。
实例
示例 1:基础用法
实例
class Person:
def __init__(self):
self.name = "Tom"
self.age = 20
p = Person()
# 获取属性
print(getattr(p, "name")) # 输出: Tom
print(getattr(p, "age")) # 输出: 20
# 使用点号
print(p.name) # 输出: Tom
def __init__(self):
self.name = "Tom"
self.age = 20
p = Person()
# 获取属性
print(getattr(p, "name")) # 输出: Tom
print(getattr(p, "age")) # 输出: 20
# 使用点号
print(p.name) # 输出: Tom
运行结果预期:
Tom 20 Tom
代码解析:
- getattr() 和点号访问效果相同。
- getattr() 的优势是可以用字符串指定属性名。
示例 2:使用默认值
实例
class Person:
def __init__(self):
self.name = "Tom"
p = Person()
# 获取存在的属性
print(getattr(p, "name", "未知")) # 输出: Tom
# 获取不存在的属性(带默认值)
print(getattr(p, "age", 0)) # 输出: 0
print(getattr(p, "city", "北京")) # 输出: 北京
# 获取不存在的属性(不带默认值)
try:
print(getattr(p, "gender"))
except AttributeError as e:
print(f"属性不存在: {e}")
def __init__(self):
self.name = "Tom"
p = Person()
# 获取存在的属性
print(getattr(p, "name", "未知")) # 输出: Tom
# 获取不存在的属性(带默认值)
print(getattr(p, "age", 0)) # 输出: 0
print(getattr(p, "city", "北京")) # 输出: 北京
# 获取不存在的属性(不带默认值)
try:
print(getattr(p, "gender"))
except AttributeError as e:
print(f"属性不存在: {e}")
运行结果预期:
Tom 0 北京 属性不存在: 'Person' object has no attribute 'gender'
代码解析:
- 第三个参数提供默认值,避免异常。
- 这在处理可选属性时很有用。
示例 3:动态访问
实例
# 动态选择属性
data = {"name": "Tom", "age": 20}
field = "name"
print(getattr(data, field)) # 通过字符串访问
# 与 setattr 配合
class Person:
pass
p = Person()
# 动态设置属性
fields = ["name", "age", "city"]
values = ["Tom", 20, "Beijing"]
for field, value in zip(fields, values):
setattr(p, field, value)
# 动态获取所有属性
for field in fields:
print(f"{field}: {getattr(p, field)}")
# hasattr 配合 getattr
if hasattr(p, "name"):
print(f"名字是: {getattr(p, 'name')}")
data = {"name": "Tom", "age": 20}
field = "name"
print(getattr(data, field)) # 通过字符串访问
# 与 setattr 配合
class Person:
pass
p = Person()
# 动态设置属性
fields = ["name", "age", "city"]
values = ["Tom", 20, "Beijing"]
for field, value in zip(fields, values):
setattr(p, field, value)
# 动态获取所有属性
for field in fields:
print(f"{field}: {getattr(p, field)}")
# hasattr 配合 getattr
if hasattr(p, "name"):
print(f"名字是: {getattr(p, 'name')}")
运行结果:
在实际环境中运行会显示动态设置的属性。
getattr() 是 Python 动态编程中非常重要的函数。
Python3 内置函数
点我分享笔记