Frage

Wie dies bei einer Python-Ebene umgesetzt wird?

Ich habe ein Objekt bekommt, dass ein dict zum größten Teil (im Nachhinein zu sein vorgibt soll ich nur subclassed dict, aber ich würde lieber die Code-Basis nicht Refactoring, und ich würde dies auch gerne für Zukunft wissen Referenz), die etwas ein bisschen wie

sieht
class configThinger(object):
    _config = {}
    def __getitem__(self, key):
        return self._config[key]
    def __setitem__(self, key, value):
        self._config[key] = value

Welche genau funktioniert, wie es sollte und korrekt verhält, wenn ich Zugriff versuchen, es Elemente wie configThingerInstance ist [ ‚unabhängig‘]

Aber ein Aufruf wie

t = configThinger()
t.populate() # Internal method that fills it with some useful data
if 'DEBUG' in t:
    doStuff()

Ergebnisse in einem KeyError angehoben werden, weil vermutlich die `in' Protokoll hat eine getitem () Suche nach dem Schlüssel in Frage. Muss ich eine andere Ausnahme erhöhen in sagen, dass er nicht da ist? Ich möchte lieber nicht so etwas tun.

try:
    t['DEBUG']
except KeyError:
    pass
else:
    doStuff()

Auch dort, wo in der Dokumentation ist das?

Ich war auf der Suche um

http://docs.python.org/tutorial/datastructures.html

http://docs.python.org/library/stdtypes.html

aber auf tragische Weise für etwas zu Google versucht, die spezifisch für das Wort ‚in‘ ist Torheit: (

EDIT 1:

Mit einem Stapel von Spuren drucken, kann ich sehen, dass das Programm ruft configThingerInstance. getitem (0)

aber

t = {'rawk': 1,
     'rawr': 2,
    }
t[0] # Raises KeyError
'thing' in t # returns False
War es hilfreich?

Lösung

Es klingt wie Sie den Operator zu überlasten wollen?

können Sie tun, indem Sie die Methode __contains__ definieren: http: // docs .python.org / reference / datamodel.html # Objekt. enthält

Andere Tipps

Für die beste Unterstützung für den in Operator (Containment aka Mitgliedschaft Prüfung), Umsetzung der __contains__ spezielle Methode auf Ihrer configThinger Klasse:

class configThinger(object):
    _config = {}
    def __getitem__(self, key):
        return self._config[key]
    def __setitem__(self, key, value):
        self._config[key] = value
    def __contains__(self, key):
        return key in self._config

hier (auch erklären, andere, weniger Möglichkeiten, den in Operator).

Unterstützung
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top