1. 程式人生 > 其它 >[Python] 自定義具有字典或列表特性的類

[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': '武將'}

給類增加列表特性

class MyList(object):

    def __init__(self, list_val):
        self.list = list_val

    def add_key(self, key_name):
        self.list.append(key_name)
        print(self.list)
        return "OK"

    def get_key(self, index):
        # 判斷傳入的索引是否超出了列表
        if 0 <= index < len(self.list):
            return self.list[index]
        return "你輸入的太多了,想太多了"

    def update_list(self, new_list):
        self.list.extend(new_list)
        return self.list

    def del_key(self):
        # 首先要判斷我們的列表裡面還有元素
        if len(self.list) >= 0:
            return self.list.pop(-1)
        else:
            return "列表是空的"

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

輸出

[1, 2, 3, 4, 5, 6]
OK
[1, 2, 3, 4, 5, 6, 8, 9, 10]