python - dict value 和 items 使用什么内部函数,以及如何覆盖它们?

标签 python python-3.x inheritance

我正在尝试编写一个继承自字典并覆盖 __setitem____getitem__ 的类,一切都很顺利,直到我注意到 items code> 和 values 不使用 __getitem__。有人知道如何覆盖他们的查找函数吗?

下面的示例实现:

class ReturnStringsDict(dict):

    def __getitem__(self, key):
        """Return value only."""
        return str(super().__getitem__(key))


test = ReturnStringsDict()
test['a'] = 1
test['b'] = 2

# Throws assertion error.
for value in test.values():
    assert isinstance(value, str)

# Throws assertion error.
for key, value in test.items():
    assert test[key] == value

最佳答案

根据模拟容器类型 ( https://docs.python.org/3.5/reference/datamodel.html#emulating-container-types ) 的文档,您应该直接实现 items()values() (以及其他一些)。

它可能有助于实现 __iter__,因为许多函数都是这样做的,但您应该真正检查此处的文档。

关于python - dict value 和 items 使用什么内部函数,以及如何覆盖它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44050954/

相关文章:

python - 在 numpy 数组中查找最接近给定值的索引。仅限于外部索引

python - 在删除发布后段的同时增加预发布的bump2version

python - 使用 Python 和 Keras 调整 CSV 数据的大小

python - 如何将 JSON 树的每个分支转换为项目列表?

c++ - 通过构造函数设置子类属性 : Bad practice?

c++ - 什么是对象切片?

python - 分块读取大文件,分块压缩和写入

python - 为什么我在 Robot Framework IDE (RIDE) 中使用 pymssql 连接到数据库时出现错误?

python - 如何在 Python 中进行 HMAC-SHA512 签名?

javascript - Javascript 中的对象类型