Nehmen wir als Beispiel an, ich möchte eine Unterklasse erstellen dictund alle Schlüssel großschreiben lassen:
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())
Dies funktioniert bis zu einem gewissen Grad,
>>> ex = capdict(map(reversed,enumerate("abc")))
>>> ex
{'A': 0, 'B': 1, 'C': 2}
>>> ex['a']
0
aber natürlich nur für Methoden, an deren Implementierung ich mich zum Beispiel erinnerte
>>> 'a' in ex
False
ist nicht das gewünschte Verhalten.
Die faule Art, alle Methoden auszufüllen, die aus den "Kern" -Methoden abgeleitet werden können, wäre nun das Einmischen collections.abc.MutableMapping. Nur funktioniert es hier nicht. Ich nehme an, weil die fraglichen Methoden ( __contains__im Beispiel) bereits von bereitgestellt werden dict.
Gibt es eine Möglichkeit, meinen Kuchen zu haben und ihn zu essen? Etwas Magie, um MutableMappingnur die Methoden zu sehen, die ich überschrieben habe, damit die anderen basierend auf diesen neu implementiert werden?
os._Environ.
MutableMapping. Siehe Wörterbuch ohne Berücksichtigung der Groß- und Kleinschreibung .