5 回答

TA貢獻1829條經驗 獲得超6個贊
而不是將字典映射到變量鍵。您可以使用它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)

TA貢獻1936條經驗 獲得超7個贊
首先,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])

TA貢獻1789條經驗 獲得超10個贊
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)
干得好 !

TA貢獻1880條經驗 獲得超4個贊
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()]

TA貢獻1865條經驗 獲得超7個贊
如果您確實需要
該解決方案適用于這種情況,其他解決方案不適合您,并且您無法更改您的班級。
問題
如果您無法以任何方式修改您的類,并且您有一個字典,其中包含您想要放入對象中的信息,您可以首先使用檢查模塊獲取類的自定義成員:
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]])
當然有更好的解決方案,但是如果其他方法不適合您,這可能會派上用場
更新
此解決方案使用基于您使用的類的屬性定義。因此,如果字典有缺失值,這個解決方案可能會有所幫助。否則,拉希德解決方案也適合您
添加回答
舉報