如何向标准字典添加行为?

时间:2017-06-08 14:55:53

标签: python dictionary

我想为标准python字典创建一个简单的包装器,或者可能是isCorrectEmail(): Promise<boolean> { return this.isEmailAvailable().then(result => result); }; 类,其中有一个默认值。

我想做的改变很简单:我想在字典中存储由于可能发生变异而无法清除的数据结构,但我在代码中保证我永远不会无论如何都要改变它们。

我的方法是检测字典的密钥是否可以清除,如果是这样,则照常进行。但是,如果密钥不可用,请先将其转换为字符串,然后照常进行。

1 个答案:

答案 0 :(得分:2)

您可以继承dict并覆盖__setitem__方法:

class CustomDict(dict):
    def __setitem__(self, key, value):
        try:
            hash(key)
        except TypeError:
            key = str(key)

        super(CustomDict, self).__setitem__(key, value)

    def __getitem__(self, key):
        try:
            hash(key)
        except TypeError:
            key = str(key)

        return super(CustomDict, self).__getitem__(key)

data = CustomDict()

data["x"] = True
data[dict(foo='bar')] = False
print(data)
>>> {'x': True, "{'foo': 'bar'}": False}
assert data[dict(foo='bar')] == False

或者您可以按照here所述创建自定义类似dict的对象。