파이썬에서 (DB, 단일 파일 또는 문자열과 같이) 트래버스 할 수 있도록하고 싶었습니다. 나는이 (단락) 쓰기 :setattr없이 인스턴스 데이터를 지우는 방법은 무엇입니까?
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 _?
추신. 나는 세트/getattr keys/vals에 대한 패스를으로 만들었지 만 엉망이 될 것입니다.
__slots__은 (Google Google) self.xxx가 __setattr__에 의해 구문 분석되므로 해당 내용이 저장되지 않습니다. –
그런 다음 이전과 같이'__slots__'을 남겨 둡니다. 그러나 각 인스턴스 (예를 들어 제가 제안한 것)에서'__keys__'와'__vals__' 둘 다에 다른 []을 설정하지 않으면 모든 인스턴스에서 같은 목록을 공유하게 될 것입니다. – AlbertFerras
시도했습니다. '__getattr__'. 'self .__ key/vals__'을 원할 때, 나는 '__key/vals__'에서'__getattr__' oper를 극대화했습니다. –