2014-04-23 1 views
2

작성 장식의 기본 방법은파이썬 @의 property.setter

def my_decorator(f): 
    def _f(*args, **kwargs): 
     # do something using f 
     pass 
    return _f 

@my_decorator 
def f(...): 
    ... 

입니다하지만 (따라서 및 데코레이터의 이름)이 속성의 이름마다 다르기 때문에 당신이 @property.setter 같은 장식을 정의 할 수있는 방법 시각.

어떻게 정의합니까? @property.setter? 파이썬에서 비슷한 것을 할 수 있습니까? 아니면 C (구현) 레벨에서만 사용할 수있는 빌트인 기능입니까? 당신이 찾고있는 무엇

+0

관련 : [? 파이썬의 @property 데코레이터 작업을 수행하는 방법 (http://stackoverflow.com/q/17330160) –

답변

1

뭔가가 descriptor라고 :

class Descriptor(object): 
    def __get__(self, instance, _type=None): 
    pass 
    def __set__(self, obj, value): 
    pass 

당신이 맞는 볼 일을 자유롭게 구현할 수 있습니다. property 데코레이터는 설명 자의 인스턴스 일 뿐이며이 항목을 설명하는 문서에서 어떻게 구현하는지 볼 수 있습니다. 여기

은 예입니다 :

class _Wrapper(object): 
    def __init__(self, caller, instance): 
     self.caller = caller 
     self.instance = instance 

    def __call__(self, *args, **kwargs): 
     print "I've been wrapped!" 
     return self.caller(self.instance, *args, **kwargs) 

    class Accouncer(object): 
    def __init__(self, method): 
     self.method = method 

    def __get__(self, instance, _type=None): 
     return _Wrapper(self.method, instance) 

    def vocal(func): 
    return Accouncer(func) 

    class Ha(object): 
    @vocal 
    def stuff(self): 
     return 1 
관련 문제