2010-04-07 2 views
16

파이썬에서는 클래스 함수와 인스턴스 메소드로 동작하지만 동작을 변경할 수있는 기능을 만들 수 있기를 바랍니다. 이것에 대한 사용 사례는 일련화할 수있는 객체 및 유형 집합입니다. 예를 들어 :동시에 인스턴스와 클래스 메소드 인 메소드 만들기

>>> class Thing(object): 
    #... 
>>> Thing.to_json() 
'A' 
>>> Thing().to_json() 
'B' 

나는 그것이 C 모듈과 간단 할 것 같은 파이썬 소스 funcobject.c에서 classmethod의 정의() 주어진이 보이는 것을 알고있다. 파이썬 안에서이 작업을 수행 할 수있는 방법이 있습니까?

감사합니다. 기술자의 힌트와 함께

, 나는 다음과 같은 코드와 함께 할 수 있었다 :
class combomethod(object): 
    def __init__(self, method): 
     self.method = method 

    def __get__(self, obj=None, objtype=None): 
     @functools.wraps(self.method) 
     def _wrapper(*args, **kwargs): 
      if obj is not None: 
       return self.method(obj, *args, **kwargs) 
      else: 
       return self.method(objtype, *args, **kwargs) 
     return _wrapper 

당신에게 알렉스 감사합니다!

+1

왜 * 유형 *을 serialize해야합니까? –

+0

에는 많은 이유가 있습니다. 필자의 특별한 문제에서이 형식을 직렬화하면 RPC 시스템에서 사양을 만들 수 있습니다. –

답변

8

물론, 설명자 유형을 정의해야합니다. 파이썬 설명자 here에 대한 훌륭한 자습서가 있습니다.