2012-03-08 2 views
2

클래스의 특정 함수를 실행하기 전에 사용자가 로그인했는지 여부를 테스트하는 인터페이스를 설계하려고합니다. 보다는 :Python - 클래스 속성을 테스트하여 클래스 속성 테스트

class UserDoesStuff(object): 
    def doIfLoggedIn(self): 
     if self.checkLogin(): 
      [...do the stuff...] 

나는 이런 식으로 뭔가 할 수 있는지 궁금 해서요 : 작동하지 않습니다 물론

def protected(self): 
    if not self.checkLogin(): 
     raise UserLoginError() 

@protected 
def doIfLoggedIn(self): 
    [...do the stuff...] 

이,하지만 장식을 사용하여이 작업을 수행하는 방법은 무엇입니까?

답변

5

장식 (별도의 인수와 간단한 것들) 입력 등의 기능을 기대 :

import functools 

def protected(fun): 
    @functools.wraps(fun) 
    def wrapper(self, *args, **kwargs): 
     if not self.checkLogin(): 
      raise UserLoginError() 
     return fun(self, *args, **kwargs) 

    return wrapper # this is what replaces the original method 

@protected 
def doIfLoggedIn(self): 
    ... 
+0

내가 찾고 있었던 바로 그 것입니다! 정말 고마워. 그것이 가능한 한 빨리 받아 들일 것입니다. –