Supposons par exemple que je souhaite sous dict- classer et que toutes les clés soient en majuscule:
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())
Cela fonctionne dans une certaine mesure,
>>> ex = capdict(map(reversed,enumerate("abc")))
>>> ex
{'A': 0, 'B': 1, 'C': 2}
>>> ex['a']
0
mais, bien sûr, uniquement pour les méthodes dont je me suis souvenu de mettre en œuvre, par exemple
>>> 'a' in ex
False
n'est pas le comportement souhaité.
Maintenant, la manière paresseuse de remplir toutes les méthodes qui peuvent être dérivées des méthodes "de base" serait de se mélanger collections.abc.MutableMapping. Seulement, ça ne marche pas ici. Je suppose que les méthodes en question ( __contains__dans l'exemple) sont déjà fournies par dict.
Existe-t-il un moyen d'avoir mon gâteau et de le manger? Un peu de magie pour MutableMappingne voir que les méthodes que j'ai remplacées afin de réimplémenter les autres en fonction de celles-ci?
os._Environ.
MutableMapping. Voir Dictionnaire insensible à la casse .