Pythonで(DB、単一ファイル、または文字列として)トラバース可能なクラスを作成したかったのです。私はこれを書きます(省略):
from json import JSONDecoder, JSONEncoder
def json_decode(object): return JSONDecoder().decode(object)
def json_encode(object): return JSONEncoder().encode(object)
class Storage:
__separator__ = 'ANY OF ANYS'
__keys__ = []
__vals__ = []
__slots__ = ('__keys__', '__vals__', '__separator__')
def __getattr__(self, key):
try:
return self.__vals__[self.__keys__.index(key)]
except IndexError:
raise AttributeError
def __setattr__(self, key, val):
self.__keys__.append(key)
self.__vals__.append(val)
def store(self):
return (json_encode(self.__keys__) + self.__separator__ +
json_encode(self.__vals__))
def restore(self, stored):
stored = stored.split(self.__separator__)
for (key, val) in zip(json_decode(stored[0]), json_decode(stored[1])):
setattr(self, key, val)
そしてそうです-それはうまくいきますが...私がより多くのインスタンスを作成しているとき、それらはすべてシングルトンのようです。
では、_ setattr _なしで属性をインスタンスに設定する方法は?
PS。私は考えました - set /getattr でkeys/valsのパスを作成しますが、混乱します。