我正在尝试编写一个继承自字典并覆盖 __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/