setattr()是 Python 的内置函数,用于动态设置对象的属性值。
基本语法:|setattr(object, name, value)|
参数介绍:
object:要设置属性的对象name:属性名(字符串)value:要设置的属性值
1. 基本用法
class Person:
pass
person = Person()
setattr(person, "age", 25)
# 等价于 person.age = 25
setattr(person, "name", "张三")
# 等价于 person.name = "张三"
print(person.name) # 输出:张三
print(person.age) # 输出:25
注意:以上代码只会作用于实例化后的person,只在特定实例上设置实例属性
若需要在类上设置类属性,请看以下示例
class Person:
pass
setattr(Person,"name","张三")
# 所有实例都会共享这个属性
instance1 = Person()
instance2 = Person()
print(getattr(instance1, "name"))
print(instance2.name)
print("Person:{}".format(getattr(Person, "name")))
注意:setattr(Person(),"name","张三")与setattr(Person,"name","张三")的区别
一个是对于实例后的设置实例属性,一个是对于类上设置类属性
若设置 setattr(Person(),"name","张三"),
- 操作对象:
Person()创建的新实例 - 效果:在特定实例上设置实例属性
- 影响范围:只影响这个特定的实例
- 问题:实例没有被保存,设置后立即被垃圾回收
若设置 setattr(Person,"name","张三"),
- 操作对象:
Person类本身 - 效果:在类上设置类属性
- 影响范围:所有实例都会共享这个属性
2.动态属性名(最常用的场景)
class Config:
pass
config = Config()
settings = {"host": "localhost", "port": 8080, "debug": True}
# 动态设置多个属性
for key, value in settings.items():
setattr(config, key, value)
print(config.host) # localhost
print(config.port) # 8080
print(config.debug) # True