الكائن تحديث الثعبان من القاموس
-
03-07-2019 - |
سؤال
هل هناك المدمج في وظيفة / المشغل I يمكن أن تستخدم لتفريغ القيم من القاموس وتعيين إلى متغيرات سبيل المثال؟
وهذا ما أنوي القيام به:
c = MyClass()
c.foo = 123
c.bar = 123
# c.foo == 123 and c.bar == 123
d = {'bar': 456}
c.update(d)
# c.foo == 123 and c.bar == 456
وشيء أقرب إلى update()
القاموس الذي قيم حمولة من قاموس آخر ولكن لكائن عادي المثال / فئة؟
المحلول
وهناك أيضا طريقة أخرى للقيام بذلك بواسطة حلقات عبر العناصر في د. هذا لا يكون لها نفس assuption أنها سوف تحصل المخزنة في c.__dict__
وهذا غير صحيح دائما.
d = {'bar': 456}
for key,value in d.items():
setattr(c,key,value)
وأو هل يمكن أن يكتب طريقة update
كجزء من MyClass
ذلك الأعمال التي c.update(d)
مثلك المتوقع أن.
def update(self,newdata):
for key,value in newdata.items():
setattr(self,key,value)
وتحقق من مساعدة لsetattr
<اقتباس فقرة>setattr(...)
setattr(object, name, value)
Set a named attribute on an object; setattr(x, 'y', v) is equivalent to
''x.y = v''.
اقتباس فقرة> نصائح أخرى
هل حاولت
f.__dict__.update( b )
وأيضا، وربما سيكون من الطراز الجيد ان يكون هناك التفاف حول طريقة التحديث ديكت و:
def update(self, b):
self.__dict__.update(b)
وPS: آسف لعدم تعليقه على @ S.Lott الصورة المنصب ولكن أنا لم يكن لديك مندوب حتى الان.
ويمكنك محاولة القيام:
def to_object(my_object, my_dict):
for key, value in my_dict.items():
attr = getattr(my_object, key)
if hasattr(attr, '__dict__'):
to_object(attr, value)
else:
setattr(my_object, key, value)
obj = MyObject()
data = {'a': 1, 'b': 2}
to_object(obj, data)
لا تنتمي إلى StackOverflow