Python 为自定义类定义 []、len()、items() 和 keys() 运算符

标签 python dictionary operator-overloading

我有一些代码来定义一个主要实体是字典的类。例如:

class MyDictionary:

    def __init__(self):
        self.__my_dict = {'a': 1,
                          'b': 2,
                          'c': 3}

    def __getitem__(self, item):
        return self.__my_dict[item]

    def __len__(self):
        return len(self.__my_dict)

    def keys(self):
        # ?

    def items(self):
        # ?

my_dict = MyDictionary
for key, value in my_dict.items():
    print([key, value])
for key in my_dict.keys():
    print(my_dict[key])

我应该如何定义成员函数,以便我可以使用 []len()keys()items() 类实例 my_dict 上的运算符就好像它是一本字典?

最佳答案

#!/usr/bin/env python

class MyDictionary:
    def __init__(self, my_dict):
        self.my_dict = my_dict

    def __getitem__(self, item):
        return self.my_dict[item]

    def __len__(self):
        return len(self.my_dict)

    def items(self):
        return self.my_dict.items()

    def keys(self):
        return self.my_dict.keys()

    def values(self):
        return self.my_dict.values()


if __name__ == '__main__':
    d = {'a': 1,'b': 2,'c': 3}
    di = MyDictionary(d)

    print(di.__len__())
    print(di.items())
    print(di.keys())
    print(di.values())
    print(di.__getitem__('b'))

输出:

3
dict_items([('a', 1), ('b', 2), ('c', 3)])
dict_keys(['a', 'b', 'c'])
dict_values([1, 2, 3])
2

关于Python 为自定义类定义 []、len()、items() 和 keys() 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55023740/

相关文章:

Python:在字典中创建字典以转换为 JSON

python - tkinter:动态更改标签文本,无需重复 If 测试

CUDA 应用程序的 C++ volatile 和运算符重载

python - 值错误: The number of classes has to be greater than one; got 1

java - 将映射映射到包含名称和值参数的对象列表

c++ - 我可以重载采用指针和非构造模板对象的运算符吗?

c++ - 无法使用 ostream 输出 C++ 输出 vector

python - Celery: '|' 运算符在链接多任务时如何工作?

python - 在 Python 中懒惰地将 N 项划分为 K 箱

python - 按索引 'at same time' 插入多个 python 子字符串