Was ist die richtige Art und Weise zu erweitern, die Dict-Klasse?

Ich soll die Implementierung von zwei verschiedenen Wörterbüchern mit einem vordefinierten Satz von gültigen keys. Auch ein Wörterbuch enthält, die andere.

class Otherdict (dict):

    _keys = ['A','B']

    def __init__(self):
        for key in self._keys:
            self[key] = None

    def populateDict(self):
        self['B'] = 10
        self['A'] = 12

class MyDict(dict):

    _keys = ['R','ED']

    def __init__(self):
        for key in self._keys:
            self[key] = None

    def __getitem__(self, key):
        if key not in self._keys:
            raise Exception("'" + key + "'" + " is not a valid key")
        dict.__getitem__(self,key)

    def __setitem__(self, key, value):
        if key not in self._keys:
            raise Exception("'" + key + "'" + " is not a valid key")
        dict.__setitem__(self,key,value)

    def populateDict(self):
        d = Otherdict()
        d.populateDict()
        self['R'] = 3
        self['ED'] = d


a = MyDict()
a.populateDict()
print a['ED'].__class__    #prints <type 'NoneType'>

Das problem ist, dass ich aus irgendeinem Grund keinen Zugriff auf das Wörterbuch befindet sich unter dem 'ED' - Taste. Was mache ich hier falsch?

Ich habe auch bemerkt, dass, wenn ich entfernen Sie die __getitem__() Methode, der code funktioniert einwandfrei

  • Sie müssen auf die if key not in self._keys: überprüfen? Kannst du nicht einfach anrufen dict.__getitem__ und lassen die Ausnahme zu propagieren?
  • Ich würde nur empfehlen, Sie verwenden eine Ausnahme geben, das ist ein bisschen genauer als Exception; es wird Ausnahmen abfangen leichter.
  • Einen kleinen Fehler mit großer Wirkung, leicht zu erkennen. Dennoch kein Grund für -1, IMHO.
  • Sie sind beide Recht, ich werde die änderungen vornehmen, danke!
InformationsquelleAutor Juan M Rivas | 2012-06-26
Schreibe einen Kommentar