Python中类对象的动态赋值
问题引出
当需要将一个数据字典中的数据保存到类对象中时,用动态赋值的方式会比单独属性赋值更方便。
动态赋值的基础
- hasattr(a,b):判断对象a中是否有属性b
- getattr(a,b,c):从对象a中取属性b的值,如果b不存在则返回c(参数c可以不写)
- setattr(a,b,c):为对象a添加一条属性b其值为c,如果已存在b则替代原始值
示例
我们先构建测试类User和数据字典:
class User(): def __init__(self): self.name = '' self.password = '' user = User()
data = {'name':'小明','password':'12345','age':2}
为了将data中的数据保存到user对象中去并且把data中多余的属性去掉,我们可以为User添加一个类方法set_data专门用于动态赋值:
class User(): def __init__(self): self.name = '' self.password = '' def set_data(self, data): for key,value in data.items(): # 遍历数据字典 if hasattr(self,key): # 如果存在同名属性 setattr(self,key,value) # 则添加属性到对象中 user = User() user.set_data(data) print(user.__dict__)
# 结果:{'name': '小明', 'password': '12345'}
总结
hasattr\getattr\setattr三个函数实现了类对象的动态赋值。