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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM