Ich schrieb ein sehr einfaches Programm, um ein Wörterbuch zu untergliedern. Ich wollte die __missing__
Methode in Python versuchen. Nach einigen Recherchen fand ich heraus, dass es in Python 2 in defaultdict
verfügbar ist. (In python 3 verwenden wir collections.UserDict though ..) Die __getitem__
ist die on verantwortlich für den Aufruf der __missing__
Methode, wenn der Schlüssel nicht gefunden wird.Python 2 __missing__ Methode
Wenn ich __getitem__
im folgenden Programm implementiere, bekomme ich einen Schlüsselfehler, aber wenn ich ohne es implementiere, bekomme ich den gewünschten Wert.
import collections
class DictSubclass(collections.defaultdict):
def __init__(self,dic):
if dic is None:
self.data = None
else:
self.data = dic
def __setitem__(self,key,value):
self.data[key] = value
########################
def __getitem__(self,key):
return self.data[key]
########################
def __missing__(self,key):
self.data[key] = None
dic = {'a':4,'b':10}
d1 = DictSubclass(dic)
d2 = DictSubclass(None)
print d1[2]
Ich dachte, ich __getitem__
umzusetzen benötigt, da es für den Aufruf __missing__
verantwortlich ist. Ich verstehe, dass die Klassendefinition von defaultdict eine __getitem__
Methode hat. Aber trotzdem, sagen wir, ich wollte meine eigene __getitem__
schreiben, wie würde ich es tun?