什么是继承的使用' dict'上课?

时间:2014-05-09 13:28:57

标签: python

我看到我的一位同事写了他的代码,如:

class a(dict):
    # something
    pass

这是一项常用技巧吗?它的用途是什么?

3 个答案:

答案 0 :(得分:1)

当你想要一个具有字典默认行为(获取和设置键)的类时,可以这样做,但实例将用于特定情况,并且你预计需要提供自定义方法或构造函数具体到那些。

例如,您可能希望有一个动态KeyStorage作为内存存储启动,但稍后会调整该类以将数据保存在磁盘上。

您还可以根据需要修改密钥和值 - 例如,在具有特定编码的数据库上存储unicode数据。

答案 1 :(得分:1)

在某些情况下,这是有道理的。例如,您可以创建一个允许不区分大小写查找的字典:

class case_insensitive_dict(dict):
    def __getitem__(self, key):
        return super(case_insensitive_dict, self).__getitem__(key.lower())

    def __setitem__(self, key, value):
        return super(case_insensitive_dict, self).__setitem__(key.lower(), value)


d = case_insensitive_dict()
d["AbCd"] = 1
print d["abcd"]

(这可能需要额外的错误处理)

答案 2 :(得分:1)

扩展内置的dict类对于创建dict" supersets" (例如"束"类可以在javascript中访问对象样式的键),而无需手动重新实现MutableMapping的5种方法。

但如果你的同事真的写了

class MyDict(dict):
    pass

没有任何自定义,我只能看到它的邪恶用途,例如向dict添加属性:

>>> a = {}
>>> a.foo = 3
AttributeError: 'dict' object has no attribute 'foo'
>>> b = MyDict()
>>> b.foo = 3
>>>