Python setattr() 函数

Python3 内置函数 Python3 内置函数


setattr() 是 Python 中用于设置对象属性的内置函数。

与直接使用点号(.)赋值不同,setattr() 允许你通过字符串动态地设置对象的属性。这在需要根据变量名来设置属性、或者处理未知属性时非常有用。

单词释义setattrset attribute(设置属性)的缩写。


基本语法与参数

语法格式

setattr(obj, name, value)

参数说明

  • 参数 obj
    • 类型: 任意对象
    • 描述: 要设置属性的对象。
  • 参数 name
    • 类型: 字符串
    • 描述: 要设置的属性名(字符串形式)。
  • 参数 value
    • 类型: 任意值
    • 描述: 要设置的值。

函数说明

  • 返回值: 无返回值(返回 None)。
  • 对应函数: 与 getattr() 函数配合使用,getattr 用于获取属性。

实例

示例 1:基础用法

实例

# 创建一个简单的类
class Person:
    pass

# 创建对象
p = Person()

# 使用 setattr 设置属性
setattr(p, 'name', 'Tom')
setattr(p, 'age', 20)
setattr(p, 'city', 'Beijing')

# 验证属性已设置
print(p.name)    # 输出: Tom
print(p.age)     # 输出: 20
print(p.city)    # 输出: Beijing

# 使用 getattr 获取属性
print(getattr(p, 'name'))  # 输出: Tom

运行结果预期:

Tom
20
Beijing
Tom

代码解析:

  1. setattr(obj, 'name', 'Tom') 相当于 obj.name = 'Tom'
  2. 属性名以字符串形式传递,可以动态设置。
  3. 可以与 getattr() 配合使用。

示例 2:动态设置属性

实例

class Student:
    pass

# 动态设置多个属性
student = Student()
fields = ['name', 'age', 'grade', 'school']
values = ['Lily', 18, 'A', 'MIT']

for field, value in zip(fields, values):
    setattr(student, field, value)

# 打印所有属性
for field in fields:
    print(f"{field}: {getattr(student, field)}")

# 设置不存在的属性
setattr(student, 'major', 'Computer Science')
print(student.major)  # 输出: Computer Science

运行结果预期:

name: Lily
age: 18
grade: A
school: MIT
Computer Science

代码解析:

  • 可以通过循环动态设置多个属性。
  • setattr 可以为对象添加新的属性。
  • 这在处理配置文件或用户输入时很有用。

示例 3:与 __dict__ 配合

实例

# 查看对象的 __dict__
class Car:
    def __init__(self):
        self.brand = "Toyota"

car = Car()
print(car.__dict__)  # 输出: {'brand': 'Toyota'}

# 使用 setattr 添加属性
setattr(car, 'model', 'Camry')
setattr(car, 'year', 2024)

print(car.__dict__)  # 输出: {'brand': 'Toyota', 'model': 'Camry', 'year': 2024}

# 检查属性是否存在
if hasattr(car, 'brand'):
    print(f"品牌: {getattr(car, 'brand')}")

运行结果预期:

{'brand': 'Toyota'}
{'brand': 'Toyota', 'model': 'Camry', 'year': 2024}
品牌: Toyota

setattr() 通常与 getattr()hasattr()delattr() 一起使用,构成完整的属性操作工具集。


Python3 内置函数 Python3 内置函数