Heim > Artikel > Backend-Entwicklung > Wie können abstrakte Basisklassen dabei helfen, das Verhalten eines Wörterbuchs perfekt zu überschreiben?
Ein Diktat perfekt überschreiben: Ein Leitfaden mit abstrakten Basisklassen
Beim Erstellen einer Unterklasse des integrierten Dikttyps wird ein einwandfreies Ergebnis erzielt Die Umsetzung kann eine Herausforderung sein. Anstatt die gesamte dict-Klasse zu überschreiben, sollten Sie einen alternativen Ansatz mit Abstract Base Classes (ABCs) aus dem Sammlungen.abc-Modul in Betracht ziehen.
Verwendung von MutableMapping ABC
The MutableMapping ABC bietet eine Schnittstelle für Klassen, die sich wie veränderbare Wörterbücher verhalten. Durch die Implementierung dieser Schnittstelle können Sie ein Objekt erstellen, das sich wie ein Diktat verhält, ohne es direkt in eine Unterklasse zu unterteilen. Hier ist ein Minimalbeispiel:
from collections.abc import MutableMapping class TransformedDict(MutableMapping): def __init__(self, *args, **kwargs): self.store = dict() self.update(dict(*args, **kwargs)) # use the free update to set keys def __getitem__(self, key): return self.store[self._keytransform(key)] def __setitem__(self, key, value): self.store[self._keytransform(key)] = value def __delitem__(self, key): del self.store[self._keytransform(key)] def __iter__(self): return iter(self.store) def __len__(self): return len(self.store) def _keytransform(self, key): return key
Diese Implementierung bietet eine Grundlage für die Manipulation von Schlüsseln durch die _keytransform-Methode. Durch Überschreiben dieser Methode in Unterklassen können Sie benutzerdefinierte Transformationen auf Schlüssel anwenden.
Vorteile der Verwendung von ABCs
Die Implementierung der MutableMapping-Schnittstelle bietet mehrere Vorteile:
Beispielverwendung
Durch das Erstellen einer Unterklasse von TransformedDict und das Definieren der _keytransform-Methode können Sie die Schlüsselbehandlung anpassen:
class MyTransformedDict(TransformedDict): def _keytransform(self, key): return key.lower() s = MyTransformedDict([('Test', 'test')]) assert s.get('TEST') is s['test'] assert 'TeSt' in s
Diese Unterklasse ermöglicht den Schlüsselzugriff ohne Berücksichtigung der Groß- und Kleinschreibung Abruf.
Zusätzliche Hinweise
Das obige ist der detaillierte Inhalt vonWie können abstrakte Basisklassen dabei helfen, das Verhalten eines Wörterbuchs perfekt zu überschreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!