Python 内建函数列表 > Python 的内置函数 setattr

Python 的内置函数 setattr() 用于动态设置对象的属性值。该函数接受三个参数:对象、属性名称字符串和属性值。当我们需要在运行时为对象添加或修改属性时,setattr() 提供了灵活的操作方式。

基本语法:

setattr(object, attribute_name, value)

详细说明:

  1. 参数解析:
    • object:需要设置属性的目标对象
    • attribute_name:字符串形式的属性名称
    • value:要设置的属性值
  2. 功能特点:
    • 可以动态地为对象添加新属性
    • 可以修改对象已有属性的值
    • 属性名称可以通过字符串形式动态指定
    • getattr() 函数形成互补操作
  3. 典型应用场景:
    • 动态配置对象属性(如根据配置文件设置属性)
    • 在元编程中动态修改类或实例
    • 实现类似字典的访问接口
    • 批量设置多个属性

示例代码

class Person:
    pass

p = Person()

# 设置单个属性
setattr(p, 'name', 'Alice')
print(p.name)  # 输出: Alice

# 批量设置属性
attributes = {'age': 25, 'job': 'Engineer'}
for key, value in attributes.items():
    setattr(p, key, value)

print(p.age, p.job)  # 输出: 25 Engineer

# 修改已有属性
setattr(p, 'age', 26)
print(p.age)  # 输出: 26

注意事项:

  1. 属性名称必须是字符串
  2. 如果对象是类的实例,属性将作用于实例而非类
  3. 与直接使用点号(.)赋值的区别在于属性名称的动态性
  4. 对于不可变对象或某些内置类型可能无法设置属性

setattr()object.attribute = value 的等价关系:

setattr(obj, 'attr', value)  # 等价于
obj.attr = value

setattr() 的优势在于属性名称可以是运行时确定的字符串变量,这在需要动态处理属性时特别有用。