使用特定键将字典作为参数传递的 Pythonic 方式

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

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

有没有一种优雅且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/

相关文章:

javascript - 范围 查看对象方法时出现问题

c++ - 在派生类之间复制构造函数

python - 使用 Pandas 解析 JSON - 附加\转义字符的问题

python - 在 Python 中使用 BeautifulSoup 抓取带下标的文本

Python requests lib,requests.Session 相当于 urllib2 的 opener 吗?

创建具有对象创建限制的工厂的 Pythonic 方式

javascript - 基于两个属性从 JavaScript 中的对象数组中获取唯一数组

python - 如何使用 OpenCV 去除图像上的蓝色背景颜色?

python - 如何舍入 Python Decimal 实例

python - 如何在pygame中添加残像?