Я пытаюсь реализовать объект dict
-like, который можно получить/изменить с помощью __getattr__
и __setattr__
для удобства использования для моих пользователей. Класс также реализует некоторые другие простые функции.
Используя этот ответ в качестве шаблона, моя реализация в настоящее время выглядит следующим образом:
from collections import MutableMapping
class Dictish (MutableMapping):
"""
A dict-like mapping object. vals are always coerced to str.
Should provide __getattr__ and __setattr__ as aliases for
__getitem__ and __setitem__.
"""
def __init__ ( self, *args, **kwargs ):
self.store = dict()
self.update(dict(*args,**kwargs))
def __getitem__ ( self, key : str ) -> str:
return self.store[key]
def __setitem__ ( self, key : str, val : str ) -> None:
self.store[key] = str(val)
def __delitem__ ( self, key : str ) -> None:
del self.store[key]
def __iter__ ( self ):
return iter(self.store)
def __len__ ( self ) -> int:
return len(self.store)
def __repr__ ( self ) -> str:
return repr(self.store)
# works fine by itself, but goes into infinite recursion
# when __setattr__ is defined
def __getattr__ ( self, attr : str ) -> str:
return self.__getitem__(attr)
# def __setattr__ ( self, attr : str, val : str ) -> None:
# self.__setitem__(attr,val)