Python 内置函数---setattr()的使用

28 阅读1分钟

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