Python setattr() 函数
setattr() 是 Python 中用于设置对象属性的内置函数。
与直接使用点号(.)赋值不同,setattr() 允许你通过字符串动态地设置对象的属性。这在需要根据变量名来设置属性、或者处理未知属性时非常有用。
单词释义: setattr 是 set 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
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
代码解析:
setattr(obj, 'name', 'Tom')相当于obj.name = 'Tom'。- 属性名以字符串形式传递,可以动态设置。
- 可以与
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
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')}")
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 内置函数
点我分享笔记