問題引出
當需要將一個數據字典中的數據保存到類對象中時,用動態賦值的方式會比單獨屬性賦值更方便。
動態賦值的基礎
- 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三個函數實現了類對象的動態賦值。