-
肥皂起泡泡
而不是将字典映射到变量键。您可以使用它setattr来设置对象中的变量。class User: name = None id = None dob = None def __init__(self, id): self.id = id def map_dict(self, user_info): for k, v in user_info.items(): setattr(self, k, v)然后让锅炉代码使用它。userObj = User(id=12)user_dict = { 'name': 'Bob', 'dob': '11-20-1993', 'something': 'blah'}userObj.map_dict(user_dict)
-
LEATH
首先,Python 中不需要预先声明属性。class Foo: bar: int # This actually creates a class member, not an instance member ...如果您想向类实例添加值,只需使用setattr()d = { 'prop1': 'value1', 'prop2': 'value2', 'prop2': 'value2'}x = Foo()for prop in d.keys(): setattr(x, prop, d[prop])
-
至尊宝的传说
1.修改类定义class User():
def __init__(self, id):
self.data = {"id":id}
userObj = User(id=12)2.更新dict()user = {"name":"Frank", "dob":"Whatever"} # Get the remaining data from elsewhere
userObj.data.update(user) # Update the dict in your userObj
print(userObj.data)干得好 !
-
慕村225694
class User(dict): def __init__(self, *args, **kwargs): super(User, self).__init__(*args, **kwargs) self.__dict__ = self然后拿起你的字典并执行以下操作:userObj = User(dictionary)setattr()编辑:然后使用该功能[setattr(userObj, key, item) for key,item in dict.items()]
-
莫回无
如果您确实需要该解决方案适用于这种情况,其他解决方案不适合您,并且您无法更改您的班级。问题如果您无法以任何方式修改您的类,并且您有一个字典,其中包含您想要放入对象中的信息,您可以首先使用检查模块获取类的自定义成员:import inspect
import numpy as np
members = inspect.getmembers(User)通过以下方式从所有成员中提取自定义属性:allowed = ["__" not in a[0] for a in members]并使用 numpy 列表理解来进行提取本身:members = np.array(members)["__" not in a[0] for a in members]修改用户假设您有以下用户和字典,并且您想要将用户属性更改为字典中的值(创建新用户的行为是相同的)user = User(1)
dic = {"name":"test", "id": 2, "dob" : "any"}那么你只需使用setattr():for m in members:
setattr(user, m[0], dic[m[0]])当然有更好的解决方案,但是如果其他方法不适合您,这可能会派上用场更新此解决方案使用基于您使用的类的属性定义。因此,如果字典有缺失值,这个解决方案可能会有所帮助。否则,拉希德解决方案也适合您