다른 시간에 저장하고 다시로드하려는 객체의 사전을 만듭니다 ("json"모듈로 " 간물").__dict__ Python에서 메소드 호출을 허용하지 않음
저는 하나의 클래스를 만들었습니다 ("Ball"이라고합시다). 그리고 사전에는 그 클래스의 여러 인스턴스가 포함되어 있습니다. 모양은 다음과 같습니다.
my_dict = {
"ball1": {"size": "big", "baseball": False, etc...},
"ball2": {"size": "small", "baseball": True, etc...},
etc...
}
"볼"클래스의 새 인스턴스를 만들 때 "my_dict"에 추가하기 만합니다.
내 "볼"클래스 나 특정 필드의 값을 변경할 수있는 방법 ... 즉이 있습니다
는changeSize(self, size)
문제 :
위해 나는 일을 할 수있는 능력을 저장을 취득하는
newBall = Ball(name)
my_dict[name] = newBall.__dict__
가
추가 : 제대로 JSON 모듈 난은 "볼"클래스의 새 인스턴스에 다음을 수행해야했다사전에 추가하면 JSON을 직렬화 할 수 있지만 "편집 모드"로 전환하면 메서드 (예 : changeSize (name))를 호출 할 수 없습니다. 사전과 더 이상 "볼"개체가 아닙니다.
(json 모듈을 사용하여) 저장하고 편집 할 수있는 방법을 사용하려면 어떻게해야합니까?
또한, 나는이 저장하고있는 방법은/로딩은 다음과 같다 :
out_file = open("testSave.json"), "w")
json.dump(my_dict, out_file, indent=4)
out_file.close()
in_file = open("testSave.json", "r")
my_dict = json.load(in_file)
in_file.close()
감사합니다!
'Ball'생성자는 최소한 이름을 필요로합니다 (그러나 프로그램에서 프롬프트되므로 프롬프트가 나타납니다). 만약 내가 기본적으로'pickle'으로 이미하고있는 것과 똑같은 일을했다면 말 하겠니? 안전성이 낮아서 json 방식을 배우려고 한 이유입니다. 또한'json'을 계속 사용한다면,'decorator '를 왜 사용하는지에 대한 간단한 설명을 주실 수 있습니까? 나는 그들에 대한 큰 이해가 없다. 고마워요! – AmericanMade
@AmericanMade - 당신은'b = cls (dictionary.get ('name'))'또는 유사한 것을 할 수있을 것입니다. 재 :'피클'- 확실한 보안 문제가 있습니다. 완전히 신뢰하지 않으면 무언가를 unpickle하지 마십시오. '@ classmethod'에 대해서, 그것은 from_json에서'cls'가 클래스의 인스턴스가 아닌 _class_가되도록합니다. – mgilson