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三个函数实现了类对象的动态赋值。

 

posted @ 2020-08-11 23:31  叶迩  阅读(2796)  评论(0编辑  收藏  举报