Wie wickle ich ein Python-Diktat?

8

Ich möchte eine Klasse implementieren, die umschließt - nicht Unterklasse - das Python dict -Objekt, so dass, wenn eine Änderung in einem Sicherungsspeicher erkannt wird, ich die Delegierten neu erstellen kann dict Objekt. Ich habe vor, jedesmal, wenn auf das Diktat zugegriffen wird, nach Änderungen im Sicherungsspeicher zu suchen.

Angenommen, ich sollte ein Objekt erstellen, das so funktioniert; Welche Methoden müsste ich implementieren?

    
Chris R 02.08.2010, 05:35
quelle

3 Antworten

12

Sie können die ABC (abstrakte Basisklasse) ableiten ) collections.Mapping (oder collections.MutableMapping , wenn Sie auch Code zulassen möchten, der Ihre Instanzen verwendet, um das simulierte / umschlossene Wörterbuch zu ändern, z. B. durch indizierte Zuweisung, pop , usw.).

Wenn Sie dies tun, dann, da die Dokumente, auf die ich hingewiesen habe, etwas indirekt bedeuten, sind die Methoden, die Sie implementieren müssen,

%Vor%

(für Mapping ) - Sie sollten auch implementieren

%Vor%

, weil das Delegieren an das Diktat, das Sie umbrechen, viel schneller erfolgen kann als das Iterationsverfahren, das das ABC andernfalls anwenden müsste.

Wenn Sie MutableMapping angeben müssen, müssen Sie auch 2 weitere Methoden implementieren:

%Vor%     
Alex Martelli 02.08.2010, 05:42
quelle
2

Zusätzlich zu dem, was bereits vorgeschlagen wurde, können Sie sich auch das UserDict ansehen.

>

Ein Beispiel für ein Objekt wie dict finden Sie in djangos Sitzungsimplementierung , speziell die Klasse SessionBase .

    
Seth 02.08.2010 05:50
quelle
1

Ich denke, es hängt davon ab, welche Methoden Sie verwenden. Wahrscheinlich __getitem__ , __setitem__ , __iter__ und __len__ , da die meisten Dinge in Bezug auf diese implementiert werden können. Aber Sie sollten sich einige Anwendungsfälle anschauen, insbesondere mit __iter__ . Etwas wie das:

%Vor%

... wird langsam sein, wenn Sie die Datenquelle bei jeder Iteration treffen, ganz zu schweigen davon, dass es möglicherweise nicht einmal funktioniert, wenn die Datenquelle sich unter Ihnen ändert. Sie sollten also vielleicht eine Art Ausnahme auslösen und iteritems als Alternative implementieren, indem Sie alle Schlüssel / Wert-Paare in einem Stapel laden, bevor Sie sie durchlaufen.

Das Python Dokumente haben Objektlisten, in denen Sie nach Methoden und Anwendungsfällen suchen können.

    
kerkeslager 02.08.2010 05:48
quelle

Tags und Links