2012-09-08 3 views
-1

좋아, 나는 이미 클래스 메서드 꾸미기에 관한 모든 질문을 읽었지만 나의 경우는 그들을 좋아하지 않는다.클래스 메서드를 장식하는 방법

u = User() 
u.create(email='[email protected]', password='secrete') 

내가 얻을 예외 : 나는 BaseDB의 클래스 메소드를 장식 할 수있는 방법

2012-09-08 18:17:18,230 ERROR [hairs.model.user][worker 2] create() takes exactly 1  argument (2 given) 
    create() takes exactly 1 argument (2 given) 

내가 이해하지 못할 또는

def safe_db(foo): 
    def _inner(*args, **kwargs): 
     try: 
      foo(args, kwargs) 
      return True 
     except Exception as e: 
      log.error(e.message) 
      print e.message 
      return False 
    return _inner 


class BaseDB(object): 
    def __init__(self): 
     self.connection = Connection() 
     self.db = self.connection.goobi 
     self.table = None 

    @safe_db 
    def create(self, **data): 
     self.table.insert(data) 

    def update(self, where, **data): 
     try: 
      self.table.update(where, {'$set': data}) 
      return True 
     except Exception as e: 
      log.error(e.message) 
      print e.message 
      return False 

그리고 나는 호출 방법은 상속 클래스 사용자로부터 생성 시도 예외를 잡아 내고 덜 고통스럽게 로깅 할 수있는 방법은 무엇입니까?

답변

2

당신은 당신의 장식에 오류가 있습니다

def safe_db(foo): 
    def _inner(*args, **kwargs): 
     try: 
      foo(*args, **kwargs) # fixed line 
      return True 
     except Exception as e: 
      log.error(e.message) 
      print e.message 
      return False 
    return _inner 
+0

많은 thx, 내 부주의는 나를 틀리게 만든다 – Denis

-1

create(email='[email protected]', password='secret')으로 함수를 호출 할 것으로 예상됩니다. 래퍼 함수를 ​​u._inner(email='[email protected]', password='secret')으로 호출하는 중입니다.이 메서드는 메서드를 호출하기 때문에 _inner(u, email='[email protected]', password='secret')으로 자동 변환됩니다.

self ~ _inner의 매개 변수를 추가해야합니다. 예 : _inner(self, ...

그러나 오류 및 그 안에 나타나는 숫자가 나와 있으면 우리에게 표시되는 코드에서 오류가 발생하지 않은 것일 수 있습니다. 일부 하위 호출에서 발생할 수 있습니다 (입력/종료 함수를 사용할 때 print 문을 추가하여 확인할 수 있음).

+0

이 나던 작품을 그리고 난 같은 예외가 2012-09-08 18 : 38 : 38,040 ERROR [hairs.model.user] [근로자 1] (생성) 정확히 1 인수 (주어진 2) create() 정확히 1 인수 (주어진 2) – Denis

관련 문제