ich brauche eine Klasse die sich grundsätzlich wie ein Dictionary verhält, aber auch noch zusätzliche Funktionen auf die internen Daten implementiert.
Ich habe drei Ansätze, die alle funktionieren, bin mir aber nicht sicher welcher zu bevorzugen ist.
Vielleicht gibt es ja auch noch weitere Möglichkeiten?
1. dict als Basisklasse
2. auf das interne __dict__ Object zugreifen
3. ein eigener Dictionary für die internen Daten
Ein generisches Beispiel aller drei Versionen:
Code: Alles auswählen
class MyDictLikeClassV1(dict):
def some_function(self):
print(f"Hier passiert etwas mit {self} was ein normaler Dictionary nicht hergibt")
class MyDictLikeClassV2:
def __init__(self, a_dictionary=None):
if a_dictionary:
self.__dict__.update(a_dictionary)
def __getitem__(self, key):
return self.__dict__[key]
def __setitem__(self, key, value):
self.__dict__[key] = value
def __delitem__(self, key):
del self.__dict__[key]
def __contains__(self, key):
return key in self.__dict__
def __len__(self):
return len(self.__dict__)
def __repr__(self):
return f"<{self.__class__.__name__}: {repr(self.__dict__)}>"
def keys(self):
return self.__dict__.keys()
def values(self):
return self.__dict__.values()
def items(self):
return self.__dict__.items()
def some_function(self):
print(f"Hier passiert etwas mit {self} was ein normaler Dictionary nicht hergibt")
class MyDictLikeClassV3:
def __init__(self, a_dictionary=None):
if a_dictionary:
self.__data = a_dictionary
def __getitem__(self, key):
return self.__data[key]
def __setitem__(self, key, value):
self.__data[key] = value
def __delitem__(self, key):
del self.__data[key]
def __contains__(self, key):
return key in self.__data
def __len__(self):
return len(self.__data)
def __repr__(self):
return f"<{self.__class__.__name__}: {repr(self.__data)}>"
def keys(self):
return self.__data.keys()
def values(self):
return self.__data.values()
def items(self):
return self.__data.items()
def some_function(self):
print(f"Hier passiert etwas mit {self} was ein normaler Dictionary nicht hergibt")