我想解决什么问题: 我想创建一个基于字典的对象。 该对象应包含一些超出本问题范围的附加方法。 传递的字典必须包含一组已知的键。
显然有效的是:
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']
...
显然并没有好多少,但至少朝着“更优雅”迈出了一步。
有没有一种优雅且Pythonic的方式来解决这个问题?
最佳答案
您可以使用setattr
函数:
for k, v in dictionary.items():
setattr(self, k) = v
或者简单地更新对象的 __dict__
属性:
self.__dict__.update(dictionary)
关于使用特定键将字典作为参数传递的 Pythonic 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51594288/