传递字典作为带有特定键的参数的Python方法

时间:2018-07-30 12:45:37

标签: python python-3.x oop dictionary parameter-passing

我要解决的问题: 我想创建一个基于字典的对象。 该对象应包含一些超出此问题范围的其他方法。 通过的字典必须必须包含一组已知的键。

显然有效的是:

   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']
         ...

显然并没有改善,但朝着“更优雅”迈出了至少一步。

有没有一种优雅而蟒蛇般的方式来解决这个问题?

1 个答案:

答案 0 :(得分:2)

您可以使用setattr函数:

for k, v in dictionary.items():
    setattr(self, k) = v

或仅更新对象的__dict__属性:

self.__dict__.update(dictionary)