Для прикладу припустимо, що я хочу підклас 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бачити лише методи, які я перекрив, щоб вони повторно реалізували інші на основі цих?
os._Environ.
MutableMapping. Див. Словник нечутливого словника .