2016-06-25 3 views
1

그래서 redis 저장소에 캐시하려는 속성이있는 특정 데이터베이스 객체가있는 웹 응용 프로그램이 있습니다. 비교적 간단하게 아래처럼 뭔가 수동으로해야 할 일 :매핑 된 객체에 대해 __setattr__ 메소드를 적절하게 변경합니다.

db_object.update({<attribute>: <value>}) 
redis.set(db_object.id, <value>) 

여기서 문제는이 코드베이스에 걸쳐 많은 장소에서 변경되는 속성 점이다. 이 접근법이 작동하지 않는다는 것을 의미하지는 않는다. 단지 반복적 인 코드를 만드는 것을 의미한다. 차라리 필요할 때마다 직접 액세스 할 수있는 캐시 용 래퍼를 가지고 있습니다. 이것은 내가 내 레디 스 저장소를 업데이 트하려는 언제든지 내가 이론적과 같이, 내가 관심이있는 특정 속성을 변경하는 것이 의미 : 내 모든 문제를 해결하는 것입니다

def __setattr__(self, name, value): 
    self.__dict__[name] = value 
    if name == <attribute>: 
     redis.set(self.id, value) 

. 유일한 문제는 상세한 here으로 매핑 된 객체에서 __dict__을 직접 수정할 수 없다는 것입니다. 같은 효과를 얻으려면 어떻게해야합니까?

답변

0

다른 질문에서이 문제를 해결할 수있는 좋은 방법을 찾았습니다.

def __setattr__(self, name, value): 
    if name == <attribute>: 
     redis.set(self.id, value) 
    super(Dataset, self).__setattr__(name, value) 
: 그냥 직접 __dict__

방법 아래의 변경 대신 슈퍼 메소드를 호출 할 수하면 원하는 효과를 가지고