Die Dokumentation enthält drei Möglichkeiten zum Erstellen einer dict-Instanz:
%Vor% Was genau ist ein Mapping hier? Was ist die minimale Schnittstelle, die für dict(mapping)
benötigt wird?
der Quellcode für CPython , dieser Kommentar:
%Vor% Also, die minimale Schnittstelle, die für dict (mapping) benötigt wird, scheint .keys()
und .__getitem__()
zu sein.
Beispielprogramm:
%Vor%Das Glossar definiert es wie folgt:
Ein Containerobjekt, das beliebige Schlüsselsuchen und -implementierungen unterstützt die in den Zuordnungen oder MutableMapping abstrakte Basis Klassen. Beispiele hierfür sind
dict
,collections.defaultdict
,collections.OrderedDict
undcollections.Counter
.
Es sieht also so aus, als ob die minimale Liste von Methoden, um die Definition zu erfüllen, __getitem__
, __iter__
, __len__
, __contains__
, keys
, items
, values
, get
,% ist. co_de% und __eq__
. Obwohl ich wette, der dict-Konstruktor benötigt eigentlich nicht alle diese.
Wie immer können Sie den Code lesen:)
Also, gehen wir zu Include/dictobject.h
:
Wir suchen also nach Dingen, die PyMapping_Keys
und PyObject_GetItem
haben. Da wir faul sind, verwenden wir einfach das Suchfeld in den Python-Dokumenten und finden die Zuordnungen Protokoll . Wenn Ihr CPython PyObject diesem Protokoll folgt, können Sie also loslegen.
Es ist die beste Antwort für Ihre Frage:
Es ist das einfachste Beispiel für das Mapping: {}
Wenn Sie einen benutzerdefinierten Zuordnungstyp erstellen möchten, können Sie ihn von der Basis dict
übernehmen und die Methode __getitem__
magic überschreiben (dies hängt von Ihren Anforderungen ab)
Tags und Links python dictionary mapping