Python getattr() 函数

Python3 内置函数 Python3 内置函数


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

运行结果预期:

Tom
20
Tom

代码解析:

  1. getattr() 和点号访问效果相同。
  2. 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}")

运行结果预期:

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')}")

运行结果:

在实际环境中运行会显示动态设置的属性。

getattr() 是 Python 动态编程中非常重要的函数。


Python3 内置函数 Python3 内置函数