【发布时间】:2020-01-29 07:53:58
【问题描述】:
为了举例,假设我想继承 dict 并将所有键都大写:
class capdict(dict):
def __init__(self,*args,**kwds):
super().__init__(*args,**kwds)
mod = [(k.capitalize(),v) for k,v in super().items()]
super().clear()
super().update(mod)
def __getitem__(self,key):
return super().__getitem__(key.capitalize())
def __setitem__(self,key,value):
super().__setitem__(key.capitalize(),value)
def __delitem__(self,key):
super().__detitem__(key.capitalize())
这在一定程度上有效,
>>> ex = capdict(map(reversed,enumerate("abc")))
>>> ex
{'A': 0, 'B': 1, 'C': 2}
>>> ex['a']
0
但是,当然,仅适用于我记得实现的方法,例如
>>> 'a' in ex
False
不是期望的行为。
现在,填充所有可以从“核心”方法派生的方法的懒惰方式
将混入collections.abc.MutableMapping。只是,它在这里不起作用。我想是因为有问题的方法(示例中为__contains__)已经由dict提供。
有没有办法让我的蛋糕吃掉?让MutableMapping 只看到我已覆盖的方法,以便它基于这些方法重新实现其他方法?
【问题讨论】:
-
您可能不需要使用
MutableMapping。见Case insensitive dictionary。 -
@martineau 谢谢,我说过这只是一个例子。
-
你可以使用
os._Environ。
标签: python python-3.x