为了示例起见,假设我想要子类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
这不是我们想要的行为.
现在,懒散地填充所有可以从"核心"方法派生的方法
有办法吃我的蛋糕吗?让MutableMapping
只看到我重写过的方法,这样它就可以在这些方法的基础上重新实现其他方法了?