在创建和解决许多涉及自定义集合的练习时,我意识到从list,dict和set继承通常会带来一些微妙的困扰。我写这篇文章是为了解释为什么我通常不建议在Python中从这些内置类继承。我的示例将重点放在dict和list上,因为这些很可能更常见地被子类化。创建一个自定义词典我们想要创建一个双向字典。当添加一个键值对时,键映射到值,同时值也映射到键。这个字典中的元素总是偶数个。如果d[k] == v是True,那么d[v] == k也总是True。我们可以尝试通过自定义删除和设置键值对来实现这一点。class TwoWayDict(dict):
def __delitem__(self, key):
value = super().pop(key)
super().pop(value, None)
def __setitem__(self, key, value):
if key in self:
del self[self[key]]
if value in self:
del self[value]
super().__setitem__(key, value)
super().__setitem__(value, key)
...
继续阅读
(65)