我要解决的问题: 我想创建一个基于字典的对象。 该对象应包含一些超出此问题范围的其他方法。 通过的字典必须必须包含一组已知的键。
显然有效的是:
class DictBasedObject(object):
def __init__(self, dictionary: {})
if 'known_key_1' in dictionary:
self.known_key_1 = dictionary['known_key_1']
if 'known_key_2' in dictionary:
self.known_key_2 = dictionary['known_key_2']
...
但是这种方式很麻烦。
我如何解决: 我想将字典作为参数传递给方法,但可能要指定字典的键名/值类型,例如:
class DictBasedObject(object):
def __init__(self, dictionary: {'known_key_1': str,
'known_key_2': int,
...})
self.known_key_1 = dictionary['known_key_1']
self.known_key_2 = dictionary['known_key_2']
...
显然并没有改善,但朝着“更优雅”迈出了至少一步。
有没有一种优雅而蟒蛇般的方式来解决这个问题?
答案 0 :(得分:2)
您可以使用setattr
函数:
for k, v in dictionary.items():
setattr(self, k) = v
或仅更新对象的__dict__
属性:
self.__dict__.update(dictionary)