私は、ユーザの使いやすさのために__getattr__
と__setattr__
でアクセス/変更できるdict
オブジェクトを実装しようとしています。クラスは他の簡単な機能も実装しています。__getattr__と__setattr__機能を使ってdict-likeオブジェクトを実装する
次のように私の実装は現在、テンプレートとしてthis answerを使用する:
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)
お勧めやお見逃しなく! – nivk