gpt4 book ai didi

python - 模拟dict接口(interface)python

转载 作者:行者123 更新时间:2023-11-28 17:10:57 25 4
gpt4 key购买 nike

出于某种原因,我无法为我的类型完美地模拟字典行为。

class IValType:
def __init__(self, v):
self.v = v

def __repr__(self):
return self.v.__repr__()

def __str__(self):
return self.v.__str__()

def __eq__(self, other):
return self.v.__eq__(other)

class Map(IValType, dict):
def __init__(self, v: dict):
super(Map, self).__init__(v)
print("debug")

def __contains__(self, item):
return self.v.__contains__(item)

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

def __setitem__(self, key, value):
self.v[key] = value

def __delitem__(self, key):
self.v.__delitem__(key)

def __missing__(self, key):
return self.v.__missing__(key)

def __get__(self, instance, owner):
return self.__get__(instance, owner)

def __iter__(self):
return self.v.__iter__()

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

@staticmethod
def fromkeys(seq):
return dict.fromkeys(seq)

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

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

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

def pop(self, k):
return self.v.pop(k)

def popitem(self):
return self.v.popitem()

def setdefault(self, k, default=None):
return self.v.setdefault(k, default)

def get(self, k):
return self.v.get(k)

def update(self, __m, **kwargs):
self.v.update(__m, **kwargs)

相等性测试失败。

class MainTest(unittest.TestCase):

def test_4(self):
# make a full test for dicts
d = {"k": 1,"p":2}
dm = Map(d)
self.assertIn("k", dm)
self.assertEqual(dm["k"], d["k"])
self.assertDictEqual(dm,d)

AssertionError: {'p': 2, 'k': 1} != {'p': 2, 'k': 1}
- {'p': 2, 'k': 1}
+ {'k': 1, 'p': 2}

我已经实现了几乎所有神奇的方法,我还缺少什么?我没有以相同方式重新实现列表的这些麻烦,并且它们也被(成功地)测试了相等性。这是 py 3.5

有什么帮助吗?

最佳答案

您的问题是缺少实现不等于,这是assertDictEqual 内部使用的(参见here):

>>> dm != d
True

定义__ne__对于 IValType

这也可以说是 unittest.TestCase 中的错误,因此您可以考虑在 bugs.python.org 提交问题。和/或切换到 a better test runner .

关于python - 模拟dict接口(interface)python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47500476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com