[Python] 自定义具有字典或列表特性的类


目录
  • 给类增加字典特性
  • 给类增加列表特性

给类增加字典特性

import collections

class MyDict(collections.UserDict):

    def __missing__(self, key):
        if isinstance(key, str):
            raise KeyError(key)
        return self[str(key)]

    def __contains__(self, key):
        return str(key) in self.data

    def __setitem__(self, key, item):
        self.data[str(key)] = item

    def __getattr__(self, key):
        return self.data[str(key)]

if __name__ == '__main__':
    dic = MyDict((('a', 1), ('c', ('d', 3)), ('b', 2)))
    # 用列表方式初始化也可以
    dic2 = MyDict([['name', '关羽'], ['age', 28], ['type', '武将']])
    dic3 = MyDict()

    # 可以像字典一样增加和修改键值对
    dic['sds'] = 'dddd'  

    print(dic)
    print(dic.a)
    print(dic['a'])
    print(dic2)

输出

{'a': 1, 'c': ['d', 3], 'b': 2, 'sds': 'dddd'}
1
1
{'name': '关羽', 'age': 28, 'type': '武将'}

给类增加列表特性

import collections

class MyList(collections.UserList):
    pass

list_info = MyList([1, 2, 3, 4, 5])
list_info.append(6)
list_info.append([3, 8, 9, 10])

list_info[0] = 11
print(len(list_info))
print(list_info)

输出

7
[11, 2, 3, 4, 5, 6, [3, 8, 9, 10]]